试图了解为什么在 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
无法给出以下异常消息:
参数化查询 '(@UserId int,@Text nvarchar(6))INSERT INTO TestNote (UserId' 需要参数 '@UserId',但未提供该参数。
为什么在使用上下文连接时传递 null 起作用?