public partial class Form1 : Form
{
SqlConnection cn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dimmer\Documents\Visual Studio 2013\Projects\Manage components\Manage components\Database1.mdf;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cmd.Connection = cn;
loadlist();
}
private void button1_Click(object sender, EventArgs e)
{
if (txtid.Text != "" & txtname.Text != "")
{
cn.Open();
cmd.CommandText = "insert into info (id,name) values ('"+txtid.Text+"'.'"+txtname.Text+"')";
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("Record instered!");
txtid.Text = "";
txtname.Text = "";
loadlist();
}
}
}
我是C#的新手,我已经尝试了几个小时的插入代码到基于服务的数据库。我已经测试了与它的连接并且它可以工作。
我收到此错误消息:
System.Data.dll中出现未处理的“System.Data.SqlClient.SqlException”类型异常
附加信息:'xxxx'附近的语法不正确。
xxxx
是我插入第二个文本框的地方。代码停在
cmd.ExcecuteNonQuery();
我一直在寻找几个小时的答案,我相信数据库出了问题。
很抱歉,如果这段代码看起来很难看,但我的空格有些问题:P
答案 0 :(得分:2)
您没有告诉我们txtid.Text
和txtname.Text
究竟是什么,但是......
您应始终使用parameterized queries
。这种字符串连接对SQL Injection
攻击开放。
cmd.CommandText = "insert into info (id,name) values (@id, @name)";
cmd.Parameters.AddWithValue("@id", txtid.Text);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cmd.ExecuteNonQuery();
看起来你正在重复使用连接,而你上次可能还没有关闭它。
您应该在完成连接后立即关闭连接。使用using
语句,如;
using(var cn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(query, cn))
{
if (txtid.Text != "" & txtname.Text != "")
{
cmd.CommandText = "insert into info (id,name) values (@id, @name)";
cmd.Parameters.AddWithValue("@id", txtid.Text);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
...
}
}