SQL Server Compact插入

时间:2012-07-27 19:39:48

标签: c# sql-server-ce

我想将数据插入到sql server Compact Edition中,数据库表截图为Here >>> 我想在用户中添加数据,添加脚本如下

SqlCeConnection Con = new SqlCeConnection();
Con.ConnectionString = "Data Source = 'Database.sdf';" +
                       "Password='Password';";
Con.Open();
int Amount=Convert.ToInt32(AmBox.Text),
Code=Convert.ToInt32(MCode.Text),
Num=Convert.ToInt32(MNum.Text);
string Name=Convert.ToString(NBox.Text),
FName=Convert.ToString(SOBox.Text),
Address=Convert.ToString(AdBox.Text);

SqlCeCommand Query =new SqlCeCommand("INSERT INTO Users VALUES " + 
                        "(++ID,Name,FName,Address,Code,Num,Amount)",Con);
Query.ExecuteReader();

运行时会生成错误SAYING“列名无效[节点名称(如果有)=,列名称= ID]

我不明白这个问题,请告诉我谢谢!

1 个答案:

答案 0 :(得分:6)

您应该将代码更改为此类

using(SqlCeConnection Con = new SqlCeConnection("Data Source = 'Database.sdf';" + 
                                                "Password='Password';")
{ 
    Con.Open(); 
    SqlCeCommand Query = new SqlCeCommand("INSERT INTO Users " + 
                             "(Name,FName,Address,MCode,MNum,Amount) " +
                             "VALUES (@Name,@FName,@Address,@Code,@Num,@Amount)",Con); 

    Query.Parameters.AddWithValue("@Name", NBox.Text);
    Query.Parameters.AddWithValue("@FName", SOBox.Text)); 
    Query.Parameters.AddWithValue("@Address",AdBox.Text)); 
    Query.Parameters.AddWithValue("@Code", Convert.ToInt32(MCode.Text));
    Query.Parameters.AddWithValue("@Num", Convert.ToInt32(MNum.Text));
    Query.Parameters.AddWithValue("@Amount" , Convert.ToInt32(AmBox.Text));
    Query.ExecuteNonQuery(); 
}
  • using语句保证正确处理 连接
  • 参数集合避免了Sql注入攻击和引用 问题
  • ExecuteNonQuery的使用,因为这是一个插入查询。
  • 删除了++ ID,它不是传递给数据库的有效值

如果ID字段是Identity列,则不从代码传递任何值,而是让数据库计算下一个值。
另外,我不确定你真的需要在数据源和密码密钥的连接字符串中使用单引号。

编辑--- 有时.SDF数据库可能位于不同的文件夹中。 (现代操作系统阻止在应用程序文件夹中写入) 在这种情况下,需要在连接字符串中设置SDF文件的路径 例如,SDF可以位于C:\ ProgramData目录的子文件夹中。

string conString = "Data Source=" + 
        Path.Combine(
               Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
               "MyAppData\\database.sdf") + ";Password=yourPassword;";