我是C#编码的新手并且已经四处寻找但很难推断出我的问题的答案。
我目前正在尝试将组合框中的文本和选定文本添加到简单的数据库表中。但是,当我尝试添加信息时,我得到一个SqlException错误未处理。我已经查看了其他答案,看到它可能与添加连接有关,我已经尝试但它仍然无法正常工作......
我的代码和错误消息,如下面的图片链接,但以防这里也是我的代码,
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace SavetoDbTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\User\\Documents\\Visual Studio 2015\\Projects\\SavetoDbTest\\SavetoDbTest\\Hobbie.mdf;Integrated Security=True"))
{
using (SqlCommand again = new SqlCommand())
{
again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
again.Connection = test;
test.Open();
again.ExecuteNonQuery();
test.Close();
MessageBox.Show("Data Entry Successful");
}
}
}
}
}
答案 0 :(得分:5)
+1 尝试使用参数化查询!但你做得不对: - )
again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
当查询字符串不期望它们时,添加参数。可能这也是你所看到的例外的原因。
您的查询字符串必须如下所示:
again.CommandText = "INSERT INTO [Table] Values(@Name, @Hobby)";
此外,TABLE
是SQL中的保留字。因此,如果您的表名为Table
,则应将其包装在方括号中。
答案 1 :(得分:2)
使用此代替:
private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\User\\Documents\\Visual Studio 2015\\Projects\\SavetoDbTest\\SavetoDbTest\\Hobbie.mdf;Integrated Security=True"))
{
using (SqlCommand again = new SqlCommand())
{
again.CommandText = "INSERT INTO [TableName] Values(@Name,@Hobby)";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
again.Connection = test;
test.Open();
again.ExecuteNonQuery();
test.Close();
MessageBox.Show("Data Entry Successful");
}
}
}
答案 2 :(得分:1)
您的代码中有3个问题。 1)您为表名,表保留了关键字 2)您从代码构建的SQL查询不正确。 3)您需要指定命令类型。
解决方案:将表名更改为有意义的内容,例如employeedata或testdata,并根据以下内容修改代码。
again.CommandType = CommandType.Text;
again.CommandText = "INSERT INTO TestData(ColumnName1,ColumnName2) Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
again.Connection = test;
test.Open();
again.ExecuteNonQuery();
test.Close();
MessageBox.Show("Data Entry Successful");
答案 3 :(得分:1)
如PaulF
所述,使用Try..Catch
块始终是一个好习惯。如果代码不适合您,它将为您提供异常消息。你走了。
private void button1_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection test = new SqlConnection("YourConnectionStringName"))
{
using (SqlCommand again = new SqlCommand())
{
again.CommandText = "INSERT INTO Table Values(@Name,@Hobby)";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
again.Connection = test;
test.Open();
again.ExecuteNonQuery();
test.Close();
MessageBox.Show("Data Entry Successful");
}
}
}
catch (Exception ex)
{
throw ex;
}
}
检查它是否正常工作。希望至少它能让你领先一步,让你知道是否有任何异常
答案 4 :(得分:1)
正是因为table
是保留关键字而抛出此异常。当SQL引擎期望找到该表的正确名称并因此抛出异常时,它会遇到此保留关键字。尝试指定正确的表名,因为我相信这个table
名称仅作为示例给出。
你的陈述应该看起来更像这样
INSERT INTO MyTable Values ...
关于以不正确的方式使用参数化查询的其他答案也是有效的。