В C# идентификатор GUID и SQL тип данных uniqueidentifier
Я хочу создать GUID и сохранить его в БД.
в C# guid может быть создан с помощью Guid.NewGuid (). Это создает 128 битное целое число. SQL Server имеет столбец uniqueidentifier, который содержит огромное шестнадцатеричное число.
есть ли хороший / предпочтительный способ заставить C# и SQL Server GUID хорошо играть вместе? (т. е. создать guid с помощью Guid.New (), а затем сохраните его в базе данных с помощью nvarchar или какого-либо другого поля ... или создать какой-то шестнадцатеричный номер формы что SQL Server ожидает каким-то другим способом)
5 ответов:
SQL ожидает GUID в виде строки. Следующее В C# возвращает строку, ожидаемую Sql.
"'" + Guid.NewGuid().ToString() + "'"что-то вроде
INSERT INTO TABLE (GuidID) VALUE ('4b5e95a7-745a-462f-ae53-709a8583700a')это то, что он должен выглядеть в SQL.
вот код snipit, показывающий, как вставить 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(); } }
вы можете передать значение Guid C# непосредственно в хранимую процедуру 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(); } }см. также: SQL Server
uniqueidentifier
// 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();
Comments