c# - 参数不起作用,这里有什么问题
问题描述
插入消息不起作用!我尝试使用参数插入数据
System.Data.SqlClient.SqlException:'变量名'@name'已经被声明。变量名称在查询批处理或存储过程中必须是唯一的。
SqlCommand com = new SqlCommand();
public Form1()
{
InitializeComponent();
}
//save | event Click
private void btnSave_Click(object sender, EventArgs e)
{
if (txtName.Text == "" || txtLocation.Text == "")
{
MessageBox.Show("no data!","Hey you...",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
com.Connection = con;
com.CommandText = "insert into Table_1 values ( @name ,@location )";
com.Parameters.AddWithValue("@name", txtName.Text);
com.Parameters.AddWithValue("@location", txtLocation.Text);
con.Open();
com.ExecuteNonQuery();
con.Close();
}
}
//clear fun
private void Clear()
{
txtName.Clear();
txtLocation.Clear();
}
}
}
}
解决方案
你有一个范围问题。com
您在修改它的范围之外定义 SqlCommand (即添加到参数列表)。本质上,您@name
每次btnSave_Click
调用方法时都会添加参数。
将您创建的行com
移到方法中,使其看起来像这样:
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "insert into Table_1 values ( @name ,@location )";
com.Parameters.AddWithValue("@name", txtName.Text);
com.Parameters.AddWithValue("@location", txtLocation.Text);
con.Open();
com.ExecuteNonQuery();
con.Close();
并SqlCommand com = new SqlCommand();
从代码顶部删除。
这样,每次方法运行时都会重新创建命令,并且当它重新创建时,参数列表将为空,并且添加参数的行不会失败。
编辑 进一步澄清 - 问题是当你在你做的地方定义它时,你应该只添加一次参数。作为“全局变量”(实际上,在您的代码中它被称为字段),例如您正在创建它只会被实例化一次,这很好。当您向 SqlCommand 添加参数时,就会出现问题。因为每次单击按钮时都会运行该按钮单击处理程序(我假设),因此您会重复将参数添加到列表中。第一次点击按钮是可以的,因为那个时候参数列表是空的。下次单击该按钮时,您将获得异常,因为该列表已经添加了这些参数。
如果要继续cmd
用作全局变量/字段,则应清除处理程序方法中的参数列表,如下所示:
com.Connection = con;
com.CommandText = "insert into Table_1 values ( @name ,@location )";
com.Parameters.clear();
com.Parameters.AddWithValue("@name", txtName.Text);
com.Parameters.AddWithValue("@location", txtLocation.Text);
con.Open();
com.ExecuteNonQuery();
con.Close();
推荐阅读
- reactjs - Redux:访问组件外部的存储
- joomla3.0 - 在 Joomla 前端编辑文章时呈现特定的自定义字段
- angular - 为什么 dataSource 没有显示在我的 mat-table 中?
- python - 序数回归算法似乎将预测转移了一类
- angular - Firebase 身份验证 RxJs 的嵌套排气映射和连接映射
- css - Gatsby 构建失败 google-fonts
- javascript - 用于组合两个 javascript 脚本并删除它们的共同点的工具
- javascript - vue.js 中的登录表单返回未定义
- django - Django 和 PostgreSQL - 如何存储时间范围?
- python - 关于返回父实例(?)