SQL Server:未插入数据

时间:2017-05-22 10:09:16

标签: c# sql sql-server ado.net dml

我正在编写一个示例应用程序,使用C#将数据插入SQL Server数据库。数据不会持久存储在数据库中。

以下是我的代码:

conn.Open();

SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "Insert into Record (ID,Name) values ('" + txtId.Text + "' , '" + txtName.Text + "')";

cmd.ExecuteNonQuery();
//cmd.Clone();
conn.Close();

值不会保留。插入值时没有错误。当我将命令改为:

"Insert into Database.dbo.Record (ID,Name) values ('"

它引发了异常:

  

关键字'数据库'附近的语法不正确。

为什么我的SQL Server数据库没有更新?

1 个答案:

答案 0 :(得分:0)

你的代码原样,可能对SQL注入开放 - 你应该使用参数。

同时检查表名和主键,例如如果ID是一个Identity列,它会在你插入时自动生成,所以你只需要INSERT INTO Record(Name)VALUES('Bob')

否则,如果ID是主键,您可能需要检查您是否尝试插入重复项。

请使用参数! (如果需要,调整SqlDbType)

您还应该在连接上使用using语句来正确处理资源,理想情况下使用事务进行更新:

string sqlQuery = "INSERT INTO Record (ID, Name) VALUES (@id, @name); ";

using (SqlConnection conn = new SqlConnection(connectionString)) {
    conn.Open();
    SqlTransaction tran = conn.BeginTransaction();

    try {
        SqlCommand command = new SqlCommand(sqlQuery, conn, tran);

        SqlParameter in1 = command.Parameters.Add("@id", SqlDbType.NVarChar);
        in1.Value = txtId.Text;
        SqlParameter in2 = command.Parameters.Add("@name", SqlDbType.NVarChar);
        in1.Value = txtName.Text;

        command.ExecuteNonQuery();

        tran.Commit();
    } catch (Exception ex) {
        tran.Rollback();    
        //...
    }
}