sha*_*oth 2 .net c# sql sql-server
我有一个SQL Server数据库表通过在.dbproj项目中部署以下描述创建:
CREATE TABLE [dbo].[Tasks]
(
TaskId uniqueidentifier primary key,
State int not null,
)
Run Code Online (Sandbox Code Playgroud)
我想用以下代码在该表中插入一行:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当ExecuteNonQuery()运行一个exeption被抛出说
在此上下文中不允许使用名称[我传递的GUID的字符串表示].
这是怎么回事?我做了同样的事情,以前将数据插入到SQLite表中并且它有效.如何将GUID传递给SQL INSERT语句?
Mar*_*len 11
使用参数化查询,如下所示:
command.CommandText = "INSERT INTO Tasks VALUES( @id, 0)";
command.Parameters.Add( "@id", SqlDbType.UniqueIdentifier, 16 ).Value = value;
Run Code Online (Sandbox Code Playgroud)
这样,数据库驱动程序就会为您格式化值.这是一个很好的做法,也有助于保护您的数据库免受SQL注入攻击.
或者,您可以让数据库为您生成guid:
command.CommandText = "INSERT INTO Tasks VALUES( NEWID(), 0)";Run Code Online (Sandbox Code Playgroud)