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