C# 在查询中插入空值作为插值参数
我试图通过使用InlineData使用xUnit构建一个简单的测试:C# 在查询中插入空值作为插值参数,c#,.net,dapper,xunit,C#,.net,Dapper,Xunit,我试图通过使用InlineData使用xUnit构建一个简单的测试: [Theory] [InlineData(null, "Message")] public void MyTest(object value, string message) { var insertQuery = $@"INSERT INTO {_MyTable} ( [MyId] )
[Theory]
[InlineData(null, "Message")]
public void MyTest(object value, string message)
{
var insertQuery = $@"INSERT INTO {_MyTable} (
[MyId]
) VALUES (
{value}
);";
using (IDbConnection connection = new SqlConnection(_connectionString))
{
connection.Execute(query);
}
}
我确实想插入值NULL,但执行时会出现以下问题:
'附近的语法不正确'。'
事实上,如果我去检查查询,它看起来是这样的:
INSERT INTO TestTable (
[MyId]
) VALUES (
);
因此,在查询中没有正确插入插入的参数。我该怎么做?谢谢大家! 既然您已经标记了它,基本上:不要使用插值字符串;这不是它的本意。相反:
使用var connection=newsqlconnection(_connectionString);
连接。执行(@“
插入到表名thishouldbeaconstant([MyId])
值(@value);”,新的{value});
请注意,这里的value
最好是作为字符串/int/等键入。因为您已经标记了它,基本上:不要使用插值字符串;这不是它的本意。相反:
使用var connection=newsqlconnection(_connectionString);
连接。执行(@“
插入到表名thishouldbeaconstant([MyId])
值(@value);”,新的{value});
请注意,
value
在这里最好是以字符串/int/等形式键入。这将通过使用参数化查询来解决,因为您无论如何都应该这样做,以获得良好的实践和安全性这将通过使用参数化查询来解决,正如为了良好的实践和安全性您应该做的那样,我尝试了这种方法,结果是:“‘不允许从数据类型sql_variant隐式转换为nvarchar。请使用CONVERT函数运行此查询’。”。(当我尝试直接在SSMS中插入空值时,没有问题)@Tarta,您是否按照我的建议更改了值的类型
,还是将其保留为对象
?提示:如果您事先不知道表名和值的类型:您做得不对我向Marc道歉,我不明白well type的意思是强类型,幸运的是我事先知道值的类型。因此,通过正确设置,它可以正常工作!非常感谢:)我尝试了这种方法,结果是:“‘不允许从数据类型sql_variant隐式转换为nvarchar。请使用CONVERT函数运行此查询’。”。(当我尝试直接在SSMS中插入空值时,没有问题)@Tarta,您是否按照我的建议更改了值的类型
,还是将其保留为对象
?提示:如果您事先不知道表名和值的类型:您做得不对我向Marc道歉,我不明白well type的意思是强类型,幸运的是我事先知道值的类型。因此,通过正确设置,它可以正常工作!非常感谢:)