参数化查询........使用C#在数据库中出现意外

时间:2014-09-15 10:02:21

标签: c# sql-server

您好,我正在尝试从window Form设计输入数据库记录并使用MS visual C#进行编程,并使用其他Window Form批准并输入数据库,我将其称为Form使用showDialog,我试图让它进入并使用字符串数组发送数据并发送它 如下

    public string[] cashg1
    {
        get { return dt; }
        set { dt = value; }
       }
          public void Entering(){
              form2.ShowDialog();
              string[] inputs = new string[10];
              DateTime Date = DateTime.Today;
              inputs[0] = numb.Text;
              inputs[1] = comboBox1.SelectedText;
              inputs[2] = owner.Text;
              inputs[3] = curency.Text;
              inputs[4] = curncyval.Text;
              inputs[5] = Depet.Text;
              inputs[6] = cridet.Text;
              inputs[7] = Convert.ToString(Date);
              inputs[8] = note.Text;

              form2.addingdata(inputs);
              cashg1 = inputs;
              }




            public void Entring_to database(){inputs = new string[10];
        using (SqlConnection connection = new SqlConnection(connectionString))
        {

            DateTime Date = DateTime.Today;
            try
            {

                SqlCommand cmd = new SqlCommand("INSERT INTO   Accont(Account_ID,Account_Name,Owners,Curency,Curncytype,Depet,Credet_devet,Date,Note) VALUES ( @@AccountID, @AccountName, @Owner, @Curncy,@Curncytype,@Depet,@Cridetdevet,@Date,@Note)");
                cmd.CommandType = CommandType.Text;
                cmd.Connection = connection;
                cmd.Parameters.AddWithValue("@@AccountID", Convert.ToInt32(inputs[0]));
                if (String.IsNullOrEmpty(inputs[0]))
                    inputs[0] = "323";
                cmd.Parameters.AddWithValue("@AccountName", Convert.ToString(inputs[1]));
                if (String.IsNullOrEmpty(inputs[1]))
                    inputs[1] = "        ";
                cmd.Parameters.AddWithValue("@Owner", inputs[2]);
                cmd.Parameters.AddWithValue("@Curncy", inputs[3]);
                cmd.Parameters.AddWithValue("@Curncytype", inputs[4]);
                cmd.Parameters.AddWithValue("@Depet", inputs[5]);
                cmd.Parameters.AddWithValue("@Cridetdevet", inputs[6]);
                cmd.Parameters.AddWithValue("@Date", Date);
                cmd.Parameters.AddWithValue("@Note", inputs[7]);
                connection.Open();//Owner
                cmd.ExecuteNonQuery();


            }
            catch (Exception ee)
            {
                MessageBox.Show("Error  :" + ee.Message);
            }
        }
      }
     }

我使用此Form输入我的数据: enter image description here 当我点击符合按钮输入datagridview中的数据时 enter image description here 符合之后,数据必须输入数据库,但是它会输入并给出我的错误

Parmeterized Query Error

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

如果value为null,

AddWithValue将不会添加参数。

如果要将AccountName设置为空白而不是null,那么您应该在代码中更改这些字符串的顺序(例如,如果输入1为空,则之前参数,而不是之后)

您的代码

cmd.Parameters.AddWithValue("@AccountName", Convert.ToString(inputs[1]));
if (String.IsNullOrEmpty(inputs[1]))
  inputs[1] = "        ";

应该是

if (String.IsNullOrEmpty(inputs[1]))
  inputs[1] = "        ";
cmd.Parameters.AddWithValue("@AccountName", Convert.ToString(inputs[1]));

相反,如果输入1为空,如果应在数据库中插入null,则应使用DBNull.Value

cmd.Parameters.AddWithValue("@AccountName", inputs[1] == null ? DBNull.Value : Convert.ToString(inputs[1]));

请参阅msdn以供参考。