嘗試在C#(.NET)的MySQL數據庫中保留Guid's。 MySQL列的類型是BINARY(16)。任何關於如何堅持guid並且後來從MySQL獲得guid的消息?尋找代碼的答案在這裏:-)在C#中存儲MySQL中的GUID
5
A
回答
11
想通了。以下是如何...
數據庫模式
CREATE TABLE `test` (
`id` BINARY(16) NOT NULL,
PRIMARY KEY (`id`)
)
代碼
string connectionString = string.Format("Server={0};Database={1};Uid={2};pwd={3}", "server", "database", "user", "password");
Guid orgId = Guid.NewGuid();
Guid fromDb = Guid.Empty;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO test (id) VALUES (?id)", conn))
{
cmd.Parameters.Add("id", MySqlDbType.Binary).Value = orgId.ToByteArray();
cmd.ExecuteNonQuery();
}
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
fromDb = new Guid((byte[])r.GetValue(0));
}
}
}
4
顯然,在MySQL .NET連接器v5.2.6 +的GetGuid()
方法應該是固定的,所以你可以use this example。
1
1)你可以像@Tim Skauge那樣插入它。但選擇.Net連接器版本很重要。當我爲V 5.2.1使用的,我只需要這樣做:
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = (Guid)r[0];
}
}
在這裏,讀者本身讀取二進制值到.NET Guid
類型。你可以看到它,如果你檢查r[0]
的類型。但對於較新的版本,即6.5.4,我發現類型爲byte[]
..即,它從db獲取二進制值到其對應的字節數組。所以,你這樣做:
using (MySqlCommand cmd = new MySqlCommand("SELECT id FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = new Guid((byte[])r[0]);
}
}
你可以閱讀爲什麼會這樣here in documentation。直接讀取Guid類型而不是字節[]的替代方法是在連接字符串中包含以下行:Old Guids=true
。
2)此外,您可以直接通過要求MySQL進行轉換來讀取二進制值作爲字符串,但根據我的經驗,此方法速度較慢。
插入:
using (var c = new MySqlCommand("INSERT INTO test (id) VALUES (UNHEX(REPLACE(@id,'-','')))", conn))
{
c.Parameters.AddWithValue("@id", Guid.NewGuid().ToString());
c.ExecuteNonQuery();
}
或
using (var c = new MySqlCommand("INSERT INTO test (id) VALUES (UNHEX(@id))";, conn))
{
c.Parameters.AddWithValue("@id", Guid.NewGuid().ToString("N"));
c.ExecuteNonQuery();
}
並選擇:
using (MySqlCommand cmd = new MySqlCommand("SELECT hex(id) FROM test", conn))
{
using (MySqlDataReader r = cmd.ExecuteReader())
{
r.Read();
Guid id = new Guid((string)r[0]);
}
}
的一件事,你需要注意的是,如果你是hex
方法插入的GUID,那麼你必須通過unhex
方法閱讀。如果您依靠.NET的ToByteArray()
方法插入它們,那麼您必須以類似方式閱讀。否則,你將得到不正確的GUID讀取,因爲.NET有一種按字節順序排列字節的特殊方法。 Catch something about it here in the context of inserting and reading Guids in .NET
相關問題
- 1. 存儲MySQL的GUID/UUID的
- 2. 如何在安裝在Ubuntu [C#]中的mysql中存儲圖像?
- 3. 在MySQL中存儲JSON?
- 4. 在MySQL中存儲數組?
- 5. 在MYSQL中存儲URL值
- 6. 在MySQL中存儲Vector3
- 7. 在mysql中存儲金額
- 8. 在MySQL中存儲Twitter OAuth
- 9. 在mysql表中存儲HTML
- 10. 在MySQL中存儲圖像
- 11. 在MySQL中存儲數據
- 12. 在MySQL中存儲Base64 PNG
- 13. 在MySql中存儲形狀
- 14. 在mysql中存儲會話
- 15. 在MySQL中存儲距離
- 16. 在mysql中存儲負值
- 17. Guid在C中生成bug#
- 18. 在MongoDB中存儲Guid as String的缺點是什麼?
- 19. 如何在存儲過程中生成新的Guid?
- 20. C#MySql在C#中存儲多個數據庫行
- 21. 序列化Guid []快速二進制存儲在C#AppFabric
- 22. mysql臨時表存儲在內存中?
- 23. C++中的GUID默認值
- 24. 在c中存儲引用#
- 25. 從存儲過程中調用存儲過程在MySQL中
- 26. 如何在TSQL存儲過程中將varbinary轉換爲GUID?
- 27. 在存儲過程中插入GUID(uniqueidentifier)值
- 28. 我應該如何在Oracle中存儲GUID?
- 29. 存儲在MySQL數據庫中的BLOB
- 30. 在MySQL中存儲BINARY的優勢
你不需要在兩個單獨的查詢中做到這一點。 Datareader本身就足夠了,它可以完成所有操作,並最終返回讀取值 – nawfal 2012-04-16 12:14:33
,並且當我嘗試時,它不起作用。看到這個鏈接:http://stackoverflow.com/questions/10032071/how-to-get-uuid-generated-by-mysql-into-ac-sharp-variable/10174083#10174083 – nawfal 2012-04-16 12:41:22