如何插入基于服务的数据库

时间:2013-11-16 22:28:25

标签: c# sql-server-express

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

1 个答案:

答案 0 :(得分:2)

您没有告诉我们txtid.Texttxtname.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();
       ...
    }
}