C# GUID 和 SQL 唯一标识符

问题描述 投票:0回答:5

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

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

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

c# sql guid uniqueidentifier
5个回答
72
投票

以下代码片段展示了如何使用参数化查询插入 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();
        }
    }

62
投票

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

"'" + Guid.NewGuid().ToString() + "'"

类似

INSERT INTO TABLE (GuidID) VALUE ('4b5e95a7-745a-462f-ae53-709a8583700a')

这就是 SQL 中应有的样子。


12
投票

您可以通过指定

SqlDbType.UniqueIdentifier
将 C# Guid 值直接传递给 SQL 存储过程。

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

int StoreGuid(Guid guid)
{
  using var connection = new SqlConnection("YourDataBaseConnectionString");
  using var command = new SqlCommand {
    Connection = connection ,
    CommandType = CommandType.StoredProcedure,
    CommandText = "StoreGuid",
    Parameters = {
      new SqlParameter {
        ParameterName = "@guid",
        SqlDbType = SqlDbType.UniqueIdentifier, // right here
        Value = guid
      }
    }
  };
  connection.Open();
  return command.ExecuteNonQuery();    
}

另请参阅:SQL Server 的

uniqueidentifier


5
投票

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


2
投票
// Create Instance of Connection and Command Object
SqlConnection myConnection = new SqlConnection(GentEFONRFFConnection);
myConnection.Open();
SqlCommand myCommand = new SqlCommand("your Procedure Name", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add("@orgid", SqlDbType.UniqueIdentifier).Value = orgid;
myCommand.Parameters.Add("@statid", SqlDbType.UniqueIdentifier).Value = statid;
myCommand.Parameters.Add("@read", SqlDbType.Bit).Value = read;
myCommand.Parameters.Add("@write", SqlDbType.Bit).Value = write;
// Mark the Command as a SPROC

myCommand.ExecuteNonQuery();

myCommand.Dispose();
myConnection.Close();
© www.soinside.com 2019 - 2024. All rights reserved.