简单,普通的SQL Server插入方法

时间:2015-08-03 15:55:06

标签: c# sql sql-server

这必须是一个简单的普通SQL insert方法,但是当我运行它并点击“button1”时我会收到错误

  

system.data.dll中发生了'system.data.sqlclient.sqlexception'类型的未处理异常

有谁知道问题是什么?

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();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

您的问题的根本原因是您没有使用参数化查询并且正在尝试动态创建sql字符串。因此,您在该字符串的汇编代码中出错。但是如果你使用参数化查询,那么遇到类似问题的可能性会低很多,因为你不必乱用引号等。除此之外,如果使用参数,则不能进行SQL注入攻击,并且使代码更具可读性。

阅读http://www.dotnetperls.com/sqlparameter关于如何使用参数化查询的方式,并且不要只修复查询字符串中的文本错误。这不是它应该完成的方式。

这也是一个很好的解释:http://www.dreamincode.net/forums/topic/268104-parameterizing-your-sql-queries-the-right-way-to-query-a-database/

答案 1 :(得分:1)

我还无法添加评论,但看起来你可能会在最后一个不应该出现的关闭括号之后有一个额外的单引号。

答案 2 :(得分:1)

正如上面几个人所提到的,你应该总是参数化你的查询,你还有一个尾随的单引号,这很可能是SQL Server所窒息的。

尝试这样的事情:

Get-ADUser | Select-Object @{Name="MyCustomColumn";Expression={"ACME"}},Name