无法使用C#将数据插入SQL数据库

时间:2011-11-21 03:33:34

标签: c# sql

我正在编写一个方法将Student插入到本地SQL数据库中,该数据库包含一个包含学生信息的表:

public void AddStudent(string name, string teachName, string pass)
{
    string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\Logo.sdf";
    SqlCeConnection connection = new SqlCeConnection("Data Source=" + dbfile + "; Password = 'dbpass2011!'");
    connection.Open();

    SqlCeTransaction transaction = connection.BeginTransaction();
    SqlCeCommand command = connection.CreateCommand();
    command.Transaction = transaction;
    command.CommandText = "INSERT INTO Students VALUES ('@name', '@id', '@pass', '@tname')";
    command.Parameters.Add("@name", name);
    command.Parameters.Add("@id", this.ID);
    command.Parameters.Add("@pass", MD5Encrypt.MD5(pass));
    command.Parameters.Add("@tname", teachName);


    command.Prepare();
    command.ExecuteNonQuery();
    transaction.Commit();
    connection.Dispose();
    connection.Close();
}

每当我使用它时,当我查看数据库中Students表的内容时,它永远不会将数据插入表中。最初我有这个返回一个int所以我可以看到它影响了多少行,它总是返回1,所以我知道它正在工作。

我已经找到了这个问题的答案,类似问题的答案就是提问者正在查看错误的.sdf文件。我已经确定我正在查看正确的文件。

非常感谢任何反馈!

3 个答案:

答案 0 :(得分:4)

command.CommandText = "INSERT INTO Students VALUES ('@name', '@id', '@pass', '@tname')";

你应该删除额外的单引号 - 这应该是:

command.CommandText = "INSERT INTO Students VALUES (@name, @id, @pass, @tname)";

此外,我不确定为什么要为单个插入打开事务 - 这也是不需要的。

答案 1 :(得分:2)

您的代码中很可能会引发异常;你需要添加一个try / catch处理程序和/或调试应用程序以确切地弄清楚发生了什么。

但是,您的代码至少存在两个问题:

  

在调用Prepare之前,请在要准备的语句中指定每个参数的数据类型。对于具有可变长度数据类型的每个参数,必须将Size属性设置为所需的最大大小。如果不满足这些条件,准备就会返回错误。

  • 您需要在处理之前关闭连接(但这不会影响插入)。

答案 2 :(得分:2)

您不需要将单引号放到参数化查询中,在参数化查询的情况下,将根据需要解析整个数据,

command.CommandText = "INSERT INTO Students VALUES (@name, @id, @pass, @tname)";

此外,最好明确设置参数类型,大小和值,如下所示:

SqlCeParameter param = new SqlCeParameter("@name", SqlDbType.NVarChar, 100);
param.Value  = name; // name is a variable that contain the data of name field
//param.Value  = 'Jhon Smith';  //Directly value also can be used

希望这会有所帮助,谢谢你的时间。