C#学习教程:通过C#在MySQL中存储GUIDMySQL列的类型为BINARY(16)。关于如何保留guid并稍后从MySQL获取guid的任何消息?在这里寻找代码答案:-)弄清楚了。方法如下...数据库模式创建表`test`(`id`BINARY(16)NOTNULL,PRIMARYKEY(`id`))codestringconnectionString=string.Format("Server={0};Database={1};uid={2};pwd={3}","服务器","数据库","用户","密码");GuidorgId=Guid.NewGuid();GuidfromDb=Guid.Empty;使用(MySqlConnectionconn=newMySqlConnection(connectionString)){conn.Open();使用(MySqlCommandcmd=newMySqlCommand("INSERTINTOtest(id)VALUES(?id)",conn)){cmd.Parameters.Add("id",MySqlDbType.Binary).Value=orgId.ToByteArray();cmd.ExecuteNonQuery();}使用(MySqlCommandcmd=newMySqlCommand("SELECTidFROMtest",conn)){使用(MySqlDataReaderr=cmd.ExecuteReader()){r.Read();fromDb=newGuid((byte[])r.GetValue(0));显然,MySQL.NETConnectorv5.2.6+中的GetGuid()方法应该得到修复,以便您可以使用此示例。1)您可以像@TimSkauge那样插入它。但选择.Net连接器版本很重要。当我使用v5.2.1时,我只需要这样做:);Guidid=(Guid)r[0];在这里,读者自己将二进制值读取为.NETGuid类型。如果检查r[0]的类型,就可以看到它。但是对于较新的版本,即6.5.4,我发现类型是byte[]..即,它从db获取二进制值到其对应的字节数组。所以你这样做:Guidid=newGuid((byte[])r[0]);您可以在文档中阅读原因。直接读取Guid类型而不是byte[]的替代方法是使用此行:连接字符串中的OldGuids=true。2)或者,你可以通过让MySQL进行转换,直接将二进制值读取为字符串,但根据我的经验,这种方法比较慢。插入:使用(varc=newMySqlCommand("INSERTINTOtest(id)VALUES(UNHEX(REPLACE(@id,'-','')))",conn)){c.Parameters.AddWithValue("@id",Guid.NewGuid().ToString());c.ExecuteNonQuery();}或使用(varc=newMySqlCommand("INSERTINTOtest(id)VALUES(UNHEX(@id))";,conn)){c.Parameters.AddWithValue("@id",Guid.NewGuid().ToString("N"));c.ExecuteNonQuery();}并选择:使用(MySqlCommandcmd=newMySqlCommand("SELECThex(id)FROMtest",conn)){使用(MySqlDataReaderr=cmd.ExecuteReader()){r.Read();Guidid=newGuid((string)r[0]);}}有一件事你需要注意是的,如果你通过hex方法插入Guids,那么你必须通过unhex方法读取它。如果您依靠.NET的ToByteArray()方法来插入它们,那么您将不得不阅读类似的内容。否则你会得到不正确的guid读取,因为.NET有一种特殊的方法来根据字节序对字节进行排序。在.NET中插入和读取Guids的上下文中抓住其中的一些上面是C#学习教程:从C#在MySQL中存储GUID如果它对你们有用并且需要了解更多关于C#学习教程,我希望分享所有内容你会更加关注它——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
