gpt4 book ai didi

sql - 使用上下文连接时不需要将 null 转换为 DBNull

转载 作者:行者123 更新时间:2023-12-04 20:56:19 25 4
gpt4 key购买 nike

试图理解为什么在 Sql server 2008 Clr 程序集中使用上下文连接时我不必将 null 转换为 DBNull

我使用以下 clr 程序:

    [SqlProcedure]
public static void ParamTest(SqlBoolean useNormalConnection)
{
bool mode = useNormalConnection.Value;

using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "INSERT INTO TestNote (UserId, [Text]) VALUES (@UserId, @Text)";

cmd.Parameters.Add("UserId", SqlDbType.Int).Value = null;
cmd.Parameters.Add("Text", SqlDbType.NVarChar).Value = "hello!";

if (mode)
{
using (SqlConnection con = new SqlConnection(@"Data Source=localhost\SQL2008;Initial Catalog=TestDb;Integrated Security=True"))
{
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
}
else
{
using (SqlConnection con = new SqlConnection("context connection=true;"))
{
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
}
}
}

exec ParamTest 0 将起作用

exec ParamTest 1 将无法工作并给出以下异常消息:

The parameterized query '(@UserId int,@Text nvarchar(6))INSERT INTO TestNote (UserId' expects the parameter '@UserId', which was not supplied.

为什么在使用上下文连接时传递 null 有效?

最佳答案

我不确定答案,但我猜它在幕后使用不同的提供程序进行上下文连接,这只是实现上的差异。我不会指望将值设置为 null 来工作。对于不同版本的 .NET Framework,行为似乎也有所不同——例如.NET 3.5 根据 this您需要使用 DBNull,但如果您切换到 .NET 4.5 文档,它根本不会提及 DBNull。

关于sql - 使用上下文连接时不需要将 null 转换为 DBNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com