【发布时间】:2018-07-30 12:56:17
【问题描述】:
我有一个运行存储过程的按钮单击功能。
存储过程返回数据。执行后取决于数据读取器的输出,需要执行另一个命令。
using (SqlDataReader oReader = command.ExecuteReader())
{
while (oReader.Read())
{
if (oReader["comments1"].ToString() == "0")
{
MessageBox.Show("CHECK THE COMMENTS AND THE GIVEN VALUE");
;
}
else
{
command.ExecuteNonQuery();
MessageBox.Show("Inserted data");
ClearTextBoxes(this);
button2.Enabled = false;
}
}
}
已经有一个打开的 DataReader 与此命令关联 必须先关闭
我知道我正在尝试使用相同的连接来读取和写入表中的数据。
是否有任何其他方法可以解决给定问题。
整个功能:
private void button2_Click(object sender, EventArgs e)
{
var connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand(@"[lis1].[_Submit_test]", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Date", SqlDbType.Date).Value = textBox1.Text;
command.Parameters.Add("@Username", SqlDbType.VarChar).Value = textBox11.Text;
command.Parameters.Add("@workflow", SqlDbType.VarChar).Value = comboBox2.Text;
command.Parameters.Add("@program", SqlDbType.VarChar).Value = comboBox1.Text;
command.Parameters.Add("@Full_Denial", SqlDbType.Int).Value = textBox2.Text;
command.Parameters.Add("@Partial_Denial", SqlDbType.Int).Value = textBox3.Text;
command.Parameters.Add("@No_Findings", SqlDbType.Int).Value = textBox4.Text;
command.Parameters.Add("@Rejections", SqlDbType.Int).Value = textBox5.Text;
command.Parameters.Add("@Unfulfilled", SqlDbType.Int).Value = textBox6.Text;
command.Parameters.Add("@TargetPerDay", SqlDbType.Int).Value = textBox7.Text;
command.Parameters.Add("@Audits_Assigned", SqlDbType.Int).Value = textBox10.Text;
command.Parameters.Add("@Total_Audits_Reviewed", SqlDbType.Int).Value = textBox12.Text;
command.Parameters.Add("@Audits_Carry_Forward", SqlDbType.Int).Value = textBox8.Text;
command.Parameters.Add("@Pending_Audits", SqlDbType.Int).Value = textBox9.Text;
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = comboBox3.Text;
SqlParameter returnParameter = command.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
using (SqlDataReader oReader = command.ExecuteReader())
{
while (oReader.Read())
{
if (oReader["comments1"].ToString() == "0")
{
MessageBox.Show("CHECK THE COMMENTS AND THE GIVEN VALUE");
}
else
{
command.ExecuteNonQuery();
MessageBox.Show("Inserted data");
ClearTextBoxes(this);
button2.Enabled = false;
}
}
}
}
}
}
【问题讨论】:
-
创建一个新的连接和命令并使用它。
-
oReader["comments1"].ToString() != "0";时你想做什么 -
旁注:
command.Parameters.Add("@Unfulfilled", SqlDbType.Int).Value = textBox6.Text;此处分配的类型是字符串,如果是 Sql Server 中的类型,则将其转换为分配中的int。 -
@D-Shih if oReader["cmets1"].ToString() != "0" 然后执行存储过程 [lis1].[_Submit_test]
-
在同一个
command对象上调用command.ExecuteReader和command.ExecuteNonQuery是没有意义的。
标签: c#