在此代码中,每次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); }
}
答案 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);