【问题标题】:Execute command inside datareader c#在datareader c#中执行命令
【发布时间】: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.ExecuteReadercommand.ExecuteNonQuery 是没有意义的。

标签: c#


【解决方案1】:

在删除 command.ExecuteNonQuery() 后,我尝试使用 command.ExecuteReader() 和 command.ExecuteNonQuery() 执行相同的命令。一切都如我所料。

 using (SqlDataReader oReader = command.ExecuteReader())
                    {
                        while (oReader.Read())
                        {
                            if (oReader["comments1"].ToString() == "0")
                            {
                                MessageBox.Show("CHECK THE COMMENTS AND THE GIVEN VALUE");
                                ;
                            }
                            else
                            {
                                MessageBox.Show("Inserted");
                                ClearTextBoxes(this);
                                button2.Enabled = false;
                            }



                        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多