C#guid和SQL uniqueidentifier

Dan*_*iel 62 c# sql guid uniqueidentifier

我想创建一个GUID并将其存储在数据库中.

在C#中,可以使用Guid.NewGuid()创建guid.这会创建一个128位整数.SQL Server有一个uniqueidentifier列,它包含一个巨大的十六进制数.

是否有一种好的/首选的方法可以使C#和SQL Server guids一起发挥良好作用?(即使用Guid.New()创建一个guid,然后使用nvarchar或其他字段将其存储在数据库中......或者通过其他方式创建SQL Server期望的表单的一些十六进制数)

DLK*_*LKJ 63

这是一个代码片段,展示了如何使用参数化查询插入Guid:

    using(SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        using(SqlTransaction trans = conn.BeginTransaction())
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.Transaction = trans;
            cmd.CommandText = @"INSERT INTO [MYTABLE] ([GuidValue]) VALUE @guidValue;";
            cmd.Parameters.AddWithValue("@guidValue", Guid.NewGuid());
            cmd.ExecuteNonQuery();
            trans.Commit();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • +1表示正确的方法,而不是直接回答问题. (4认同)

Pet*_*ert 50

SQL期望GUID为字符串.C#中的以下内容返回Sql期望的字符串.

"'" + Guid.NewGuid().ToString() + "'"
Run Code Online (Sandbox Code Playgroud)

就像是

INSERT INTO TABLE (GuidID) VALUE ('4b5e95a7-745a-462f-ae53-709a8583700a')
Run Code Online (Sandbox Code Playgroud)

是它在SQL中应该是什么样子.

  • 如果使用SqlParameter,则不必将GUID转换为字符串. (31认同)
  • 为了让每个人都清楚,我并不是建议应该使用C#中使用字符串连接来演示指定的sql.我相信,问题的关键在于SQL UNIQUEIDENTIFIER LITERAL的形式.文字看起来就像一个字符串,但具有特殊格式.这两个代码片段展示了2种语言的字面意思.我同意DLKG的观点,即使用参数化查询并将guid作为类型化参数传递既可以提高性能,又可以防止潜在的SQL注入攻击. (6认同)
  • 在Entity Framework中,数据库第一个方法,一个`uniqueidentifier` SQL数据类型(由@TorHaugen评论推荐)转换为`System.Guid` C#数据类型,这是OP询问的 (4认同)

I a*_*ica 7

您可以通过指定将C#Guid值直接传递给SQL存储过程SqlDbType.UniqueIdentifier.

您的方法可能如下所示(前提是您的唯一参数是Guid):

public static void StoreGuid(Guid guid)
{
    using (var cnx = new SqlConnection("YourDataBaseConnectionString"))
    using (var cmd = new SqlCommand {
        Connection = cnx,
        CommandType = CommandType.StoredProcedure,
        CommandText = "StoreGuid",
        Parameters = {
            new SqlParameter {
                ParameterName = "@guid",
                SqlDbType = SqlDbType.UniqueIdentifier, // right here
                Value = guid
            }
        }
    })
    {
        cnx.Open();
        cmd.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

另请参见:SQL Server uniqueidentifier


Jay*_*ggs 5

将其存储在数据库中数据类型为 uniqueidentifier 的字段中。