简单,普通的SQL Server插入方法
本文关键字:Server 插入 方法 SQL 简单 | 更新日期: 2023-09-27 18:06:03
这必须是一个简单的,普通的SQL insert
方法,但当我运行它,我点击"button1"我得到错误
类型为"system.data.sqlclient"的未处理异常。
sqlception ' occurred in system.data.dll
有谁知道是什么问题吗?
namespace InsertDeleteUpdate_Login
{
public partial class Form1 : Form
{
SqlConnection cn = new SqlConnection(@"Data Source=(LocalDB)'v11.0;AttachDbFilename=E:'C #'InsertDeleteUpdate-Login'InsertDeleteUpdate-Login'Database1.mdf;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;
public Form1()
{
InitializeComponent();
cmd.Connection = cn;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "")
{
cn.Open();
cmd.CommandText = "INSERT INTO info (ID,Name,Password)" + " VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')'";
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("Inserare reusita");
cn.Close();
}
}
}
}
问题的根本原因是您没有使用参数化查询,而是试图动态地创建一个sql字符串。因此,在该字符串的汇编代码中会出现错误。但是如果您使用参数化查询,遇到类似问题的机会就会低得多,因为您不必为引号之类的东西而烦恼。最重要的是,如果你使用参数,你就不会有sql注入攻击,而且它也使代码更具可读性。
阅读http://www.dotnetperls.com/sqlparameter了解如何以正确的方式使用参数化查询,而不仅仅是修复querystring中的文本错误。这不是应该这样做的。
这也是一个很好的解释:http://www.dreamincode.net/forums/topic/268104-parameterizing-your-sql-queries-the-right-way-to-query-a-database/
我还不能添加注释,但是看起来你可能在最后一个不应该在那里的右括号后面有一个额外的单引号
正如上面几个人提到的,你应该总是参数化你的查询,你也有一个尾单引号,这很可能是SQL Server阻塞的原因。
试试这样写:
cmd.CommandText = "INSERT INTO info (ID, Name, Password) VALUES (@ID, @Name, @Password)";
cmd.Parameters.AddWithValue("@ID", textBox1.Text);
cmd.Parameters.AddWithValue("@Name", textBox2.Text);
cmd.Parameters.AddWithValue("@Password", textBox3.Text);
cmd.ExecuteNonQuery();