C# 在处理“问题”时发出\0“;通过命令参数在Sql Server数据库中
当我通过C#[.Net 4]代码从MS SQL Server数据库查询数据并向查询中添加一个值为C# 在处理“问题”时发出\0“;通过命令参数在Sql Server数据库中,c#,sql-server,C#,Sql Server,当我通过C#[.Net 4]代码从MS SQL Server数据库查询数据并向查询中添加一个值为“\0””的参数时,将毫无例外地获得datareader,当我从datareader读取数据时,我会得到异常 出于测试目的,我使用了“\0”来代替GUID,除了在输入端之外,是否有其他方法可以解决此问题。我认为您混淆了几种类型的Null(.NET ClrNull引用、数据库Null值和ASCII 0字符文本) 如果要在C#pass中传递空字符串 传递空值传递null string nullString
“\0”
”的参数时,将毫无例外地获得datareader,当我从datareader读取数据时,我会得到异常
出于测试目的,我使用了
“\0”
来代替GUID,除了在输入端之外,是否有其他方法可以解决此问题。我认为您混淆了几种类型的Null(.NET ClrNull
引用、数据库Null
值和ASCII 0字符文本)
如果要在C#pass中传递空字符串
传递空值传递null
string nullString = null;
但是,要传递数据库NULL
,请传递DBNull
dbParam.Value = string.IsNullOrEmpty(str)? DBNull.Value : str;
另请参见@sehe不确定,从数据库返回值后转换值可能会出现问题。“这不会是一个错误,”萨拉瓦南请提供更多的细节。这张桌子看起来像什么?还请发布准确的查询和参数类型。好的,同意他需要显示更多代码。然而,问题是在接收结果之前,将值(可能无效)传递到准备好的查询中command@sehe:和Marnix van Valen。这是我的错误,事实上,当我从datareader读取数据时,我得到了错误,我一直检查到execute reader,并忽略了reader.read()调用。。无论如何。。谢谢你的回复为什么你不提供人们想要的信息?请。请注意,我在测试时从PEX获得了ASCII 0字符文本。有没有办法用C#?中的复选框过滤掉0个字符的文字?当然可以。只需搜索字符(
.IndexOf
),替换它(.replace(“\0”),“)
),或者只需比较它(string.Equals(str,“\0”)?DBNull.Value:str
),我现在正按照您所说的做,但报告为错误的值,而不是替换。感谢您的明确解释。如果您曾经使用过Pex和Moles,请告诉我它在单元测试中的用法。我目前正在探索这些。
dbParam.Value = string.IsNullOrEmpty(str)? DBNull.Value : str;