因此,显然,ExecuteReader用于只读,而ExecuteNonQuery用于事务。但是由于某些原因,即使使用ExecuteReader,我仍然可以运行write(插入,更新,删除)命令(在textbox1中键入)。我的代码有问题吗?还是我误解了ExecuteReader应该工作的方式?

//MY CODE

string sqlStatement = textbox1.Text;

System.Data.SqlClient.SqlConnectionStringBuilder builder =
  new System.Data.SqlClient.SqlConnectionStringBuilder();
builder.DataSource = ActiveServer;
builder.IntegratedSecurity = true;

System.Data.SqlClient.SqlConnection Connection = new
   System.Data.SqlClient.SqlConnection(builder.ConnectionString);
Connection.Open();

System.Data.SqlClient.SqlCommand command = new
  System.Data.SqlClient.SqlCommand(sqlStatement, Connection);
System.Data.SqlClient.SqlDataReader reader = command.ExecuteReader();

dataGridView1.AutoGenerateColumns = true;

bindingSource1.DataSource = reader;
dataGridView1.DataSource = bindingSource1;

reader.Close();
Connection.Close();

最佳答案

ExecuteReader只是返回一个读取器,该读取器可以读取从SQL过程返回的行-不会阻止您在提供该结果集的路上运行任意SQL。

进行插入/更新/删除,然后立即返回结果集(因此从看起来像读取的代码中返回)可能有些奇怪(读取:代码气味),应进行检查以查看是否可以将其拆分为不同的操作。

10-08 06:12