在DataReader C#中执行命令

时间:2018-07-30 12:56:18

标签: c#

我有一个按钮单击功能,用于运行存储过程。

存储过程返回数据。执行之后,取决于数据读取器的输出,需要执行另一个命令。

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;
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

在我删除命令.ExecuteNonQuery()之后,我尝试使用command.ExecuteReader()和command.ExecuteNonQuery()执行同一命令。一切都按我的预期进行。

app:layout_constraintBottom_toTopOf="@+id/gL_right_margin"