C#生成的GUID如何正确存入SQL Server的UUID类型字段
正确实现C# GUID存入SQL Server uniqueidentifier字段的方案
现有写法存在两个核心问题:一是通过字符串拼接构造SQL语句有SQL注入风险,二是完全没必要将Guid转为字符串再存入数据库。
正确实现代码如下:
// 直接生成Guid类型变量,无需提前转字符串 Guid newGuid = Guid.NewGuid(); using (var connection = new SqlConnection("你的数据库连接字符串")) { connection.Open(); // 使用参数占位符构造SQL语句,不要做字符串拼接 string insertSql = "INSERT INTO dbo.settings(GUID) VALUES(@GuidParam);"; using (var command = new SqlCommand(insertSql, connection)) { // 直接传入Guid类型参数,ADO.NET会自动匹配SQL Server的uniqueidentifier类型 command.Parameters.AddWithValue("@GuidParam", newGuid); command.ExecuteNonQuery(); } }
疑问解答
疑问1:GUID是否需要转字符串/字节数组存入数据库
- 不需要转字符串,也不需要手动转字节数组。SQL Server中存储UUID的类型是
uniqueidentifier,对应C#中的System.Guid类型,ADO.NET原生支持两种类型的映射,直接传Guid类型的参数即可,框架会自动处理类型转换。 - 你了解到的「转字节数组存入」是底层实现逻辑,不需要在业务代码里手动处理,手动转反而会增加不必要的代码复杂度。
疑问2:存入后看到的GUID全为大写的原因
- SQL Server的
uniqueidentifier类型本质是16字节的二进制值,本身没有大小写属性。你在数据库管理工具中看到的大写格式,只是工具将二进制值转为字符串展示时默认用了大写格式,不影响实际存储的值。 - 你从C#中读取该字段时,直接转换为Guid类型拿到的结果和你存入时的Guid完全一致,大小写展示的差异只是不同工具的字符串格式化规则不同而已。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

