如何将GUID值传递给SqlCommand对象SQL INSERT语句?

时间:2011-03-17 10:55:34

标签: c# .net sql sql-server

我有一个通过在.dbproj项目中部署以下描述而创建的SQL Server数据库表:

CREATE TABLE [dbo].[Tasks]
(
TaskId uniqueidentifier primary key,
State int not null,
)

我希望使用以下代码在该表中插入一行:

using( SqlTransaction transaction = connection.BeginTransaction() ) {
    using( SqlCommand command = connection.CreateCommand() ) {
        command.CommandText = "INSERT INTO Tasks VALUES( \"" +
            Guid.NewGuid().ToString() + "\", 0)";
        command.Transaction = transaction;
        command.ExecuteNonQuery();
        transaction.Commit();
    }
}

ExecuteNonQuery()运行时,会抛出一个说法

  

在此上下文中不允许使用名称[我传递的GUID的字符串表示形式。

怎么了?我做了同样的事情,以前将数据插入到SQLite表中并且它有效。如何将GUID传递给SQL INSERT语句?

1 个答案:

答案 0 :(得分:11)

使用参数化查询,如下所示:

command.CommandText = "INSERT INTO Tasks VALUES( @id, 0)";
command.Parameters.Add( "@id", SqlDbType.UniqueIdentifier, 16 ).Value = value;

这样,数据库驱动程序会为您格式化值。这是一个很好的做法,也有助于保护您的数据库免受SQL注入攻击。

或者,您可以让数据库为您生成guid:

command.CommandText = "INSERT INTO Tasks VALUES( NEWID(), 0)";