c# - 如何将 GUID 值传递到 SqlCommand 对象 SQL INSERT 语句中?

标签 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() 运行时抛出异常

The name [the string representation of the GUID I passed] is not permitted in this context.

怎么了?我之前做了同样的操作,将数据插入到 SQLite 表中,并且成功了。如何将 GUID 传递到 SQL INSERT 语句?

最佳答案

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

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

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

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

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

关于c# - 如何将 GUID 值传递到 SqlCommand 对象 SQL INSERT 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338038/

相关文章:

SQL xml 列组和计数元素数据

c# - 在 lambda 中使用变量

c# - 如何用 C# 或 C++ 读取 COM TypeLib?

c# - 使用 Java 在 C# 中从嵌套类访问父类成员的差异

c# - 在 Gtk# 中检索子部件的最佳方式

c# - 返回 ICollection<T> 而不是 List<T> 的真正优势是什么?

c# - 按类型查找 WPF 窗口中的所有控件

mysql - SQL:返回访问过同一个地方的用户列表

c# - 在 Entity Framework 核心中执行业务规则

sql - 查询小于特定时间的时间