我尝试使用SQL参数将文本框中的文本添加到SQL数据库中。
我已经测试了连接并且它正在打开,但我仍然从try,catch语句中获得异常。我可能会出错的任何想法?
这是我的代码:
private void button3_Click(object sender, EventArgs e)
{
try
{
SqlConnection cnn = new SqlConnection(@"Server=.\SQLEXPRESS;Initial Catalog=MyAdventureWorks;Trusted_Connection=yes;");
SqlCommand addEmployee = new SqlCommand("INSERT INTO dbo.DimEmployee (ParentEmployeeKey, FirstName, LastName, NameStyle, CurrentFlag, SalesPersonFlag)" + "Values (@parentEmployeeKey,@firstName, @lastName, @nameStyle, @currentFlag, @salesPersonFlag)", cnn);
addEmployee.Parameters.AddWithValue("@parentEmployeeKey", textBox1.Text);
addEmployee.Parameters.AddWithValue("@firstName", textBox2.Text);
addEmployee.Parameters.AddWithValue("@lastName", textBox3.Text);
addEmployee.Parameters.AddWithValue("@nameStyle", textBox4.Text);
addEmployee.Parameters.AddWithValue("@currentFlag", textBox5.Text);
addEmployee.Parameters.AddWithValue("@salesFlag", textBox6.Text);
cnn.Open();
addEmployee.ExecuteNonQuery();
cnn.Close();
MessageBox.Show("Employee added to database");
}
catch (SqlException ex)
{
MessageBox.Show("An unknown error occured");
}
答案 0 :(得分:1)
如果是这种情况,您可以将命令中的最后一个参数定义为@salesPersonFlag
,但是尝试使用@salesFlag
名称在参数集合中添加此值。它们应该是一样的。
更改您的
addEmployee.Parameters.AddWithValue("@salesFlag", textBox6.Text);
到
addEmployee.Parameters.AddWithValue("@salesPersonFlag", textBox6.Text);
还可以使用using
statement自动处理您的连接和命令,而不是手动调用Close()
方法。
尽量不要AddWithValue
使用Add
。 It may generate unexpected and surprising results sometimes。使用using(var cnn = new SqlConnection(conString))
using(var addEmployee = con.CreateCommand())
{
// Set your CommandText property
// Add your parameter values with Add method3
// Open your connection
// Execute your query
}
方法重载来指定参数类型及其大小。
{{1}}