我怎样才能在c#编程中清除这个错误

时间:2015-01-27 17:30:17

标签: c#

在此代码中,每次ShenasehSamapel是两个相等的值时,我会得到一个异常,表示字段ShenasehSamapel不是主键:

  

"变量名称' @ ShenasehSamapel'已经宣布。   变量名在查询批处理中必须是唯一的或存储的   。步骤"

以下是生成错误的代码:

    private void btnDefineNewKala_Click(object sender, EventArgs e)
    { 
        if (txtShenasehSamapel.Text != "" & txtKalaName.Text != "")
        {
            //Anbar.FildArray[0]= txtRadif.Text;
            Anbar.FildArray [1]= txtShenasehSamapel.Text;
            Anbar.FildArray[2] =txtKalaName.Text;
            string strDefineKala = "insert into AnbarFava.dbo.DefineKala (ShenasehSamapel ,KalaName )" +
                                  " values ( @ShenasehSamapel , @KalaName )";
            //Anbar.AnbarCMD.Parameters.AddWithValue("@Radif", Anbar.FildArray[0]);
            Anbar.AnbarCMD.Parameters.AddWithValue("@ShenasehSamapel", Anbar.FildArray[1]);
            Anbar.AnbarCMD.Parameters.AddWithValue("@KalaName", Anbar.FildArray[2]);

            Anbar.RunQuery(strDefineKala);
            for (int Element = 0; Element <= Anbar.FildArray.Length - 1; Element++)
            {   Anbar.FildArray[Element] = null;    }
            //txtRadif.Text  = " ";
            txtShenasehSamapel.Text = "";
            txtKalaName.Text = "";
            /**/
            string strcmd = "select * from AnbarFava.dbo.DefineKala";
            SqlDataAdapter thisDataAdapter = new SqlDataAdapter(strcmd, Anbar.strCNN);
            DataTable thisDataTable = new DataTable();
            thisDataAdapter.Fill(thisDataTable);
            dgvDefineKala.DataSource = thisDataTable;
        }
        else
        { 
            MessageBox.Show("لطفا تمام خانه ها را پر کنید", "خطا",
                             MessageBoxButtons.OK); } 
    }

1 个答案:

答案 0 :(得分:5)

您正在重复使用函数调用中的连接和命令,您之前的调用中的参数与当前调用冲突。

Anbar.AnbarCMD不应该存在,每次都应该创建一个新命令。我还假设Anbar也拥有一个SqlConnection对象,它也不应该这样做。所有Anbar应该保持的是一个连接字符串,并且每次单击都应创建一个新连接和新命令(确保将命令和连接放在using语句中,以便它们被处理掉)

我不确切知道RunQuery正在做什么,但可以将其重写为与

类似的内容
public void RunQuery(string query, params SqlParameter[] parameters)
{
    using(var connection = new SqlConnection(_connectionString)
    using(var command = new SqlQuery(query, connection)
    {
        connection.Open();
        command.Parameters.AddRange(parameters);
        command.ExecuteNonQuery();
    }

}

然后你就这样称呼它

  var param1 = new SqlParameter("@ShenasehSamapel", Anbar.FildArray[1]);
  var param2 = new SqlParameter("@KalaName", Anbar.FildArray[2]);
  Anbar.RunQuery(strDefineKala, param1, param2);