試圖瞭解爲什麼當在Sql server 2008 Clr程序集中使用上下文連接時,我不必將null
轉換爲DBNull
。使用上下文連接時不需要將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'expect'參數'@UserId',它不是 提供的。
爲什麼傳遞null在使用上下文連接時工作?
我的SQL Server安裝在這臺機器上壞了,所以無法測試自己 - 如果在添加參數時在參數名稱中包含「@」,它會有什麼不同嗎? –
包含'@'沒有效果。 – Shikyo