2

我想将数据插入到 sql server Compact edition 数据库表截图在这里 >>> 我想在用户中添加数据添加脚本如下

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

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

我不知道问题请告诉我谢谢!

4

1 回答 1

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 语句保证连接的正确处理
  • Parameter 集合避免 Sql Injection Attacks 和引用问题
  • 使用 ofExecuteNonQuery因为这是一个插入查询。
  • 删除了 ++ID,它不是传递给数据库的有效值

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

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

string conString = "Data Source=" + 
        Path.Combine(
               Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
               "MyAppData\\database.sdf") + ";Password=yourPassword;";
于 2012-07-27T19:56:34.670 回答