2

我正在尝试将记录添加到我的 C# 项目中,它运行时没有错误,但它没有在数据库中添加任何内容:

private void saveBtn_Click(object sender, EventArgs e)
{
    if (admNo.Text != "" & session.Text != "" & name.Text != "")
    {
        SqlConnection cn = new SqlConnection("Data Source=C:\\Users\\Divya Pathak\\Documents\\Visual Studio 2012\\Projects\\SchoolRecord\\SchoolRecord\\Database1.sdf");
        SqlCommand cmd = new SqlCommand();
        cn.Open();
        cmd.CommandText = "insert into addNew (no,session,name) values ('" + admNo.Text + "', '" + session.Text + "', '" + name.Text + "')";
        cmd.ExecuteNonQuery();
        cn.Close();
        MessageBox.Show("Record inserted successfully", "mission successfull");
    }
}

有人可以请教为什么吗?

4

2 回答 2

5

你需要设置cm.Connectioncn

cm.Connection =cn;

或者

using (var cn = new SqlCeConnection("connection string"))
using (var cmd = new SqlCeCommand("insert addNew (no,session,name) values (@no,@session,@name)", cn))
{
    cmd.Parameters.AddWithValue("@no", admNo.Text);
    cmd.Parameters.AddWithValue("@session", session.Text);
    cmd.Parameters.AddWithValue("@name", name.Text);
    cn.Open();
    cmd.ExecuteNonQuery();
}

将帮助您为 SQL CE 编写正确的连接字符串

于 2013-10-09T03:00:08.567 回答
4

你有四个错误:

  1. 您永远不会将连接与命令相关联

  2. 您正在使用完整的 Sql Server 提供程序连接到 Sql Server Compact 数据库(您应该使用 SqlCe 命名空间:

  3. 您正在使用不安全的字符串连接而不是查询参数来构建查询。解决这个问题!

  4. 如果抛出异常,您的连接将不会关闭,这最终会将您锁定在数据库之外。您需要将连接作为finally块的一部分关闭,最简单的方法是使用using块。

.

using (var cn = new SqlCeConnection("connection string here"))
using (var cmd = new SqlCeCommand("insert into addNew (no,session,name) values (@no,@session,@name)", cn))
{
    //guessing at column lengths:
    cmd.Parameters.Add("@no", SqlDbType.Int).Value = int.Parse(admNo.Text);
    cmd.Parameters.Add("@session", SqlDbType.NVarChar, 100).Value = session.Text;
    cmd.Parameters.Add("@name", SqlDbType.NVarChar, 60).Value = name.Text;

    cn.Open();
    cmd.ExecuteNonQuery();
}
于 2013-10-09T03:02:33.740 回答