采用ADO.NET SQLCommand执行带参数查询时,出现以下错误提示:
其他信息: 参数化查询 '(@ID int,@Name nvarchar(4000)) INSERT INTO table_test(FID,FName) ' 需要参数 @Name,但未提供该参数。
原因:通过跟踪工具发现在服务端变成如下SQL语句,
exec sp_executesql N'INSERT INTO table_test(FID,FName) VALUES(@ID,@Name)',N'@ID int,@Name nvarchar(4000)',@ID=1,@Name=default //注意这里,应该是NULL而不是default
解决办法:
SqlConnection con = new SqlConnection("Server=.;Integrated Security=SSPI;Initial Catalog=test;");
con.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO table_test(FID,FName) VALUES(@ID,@Name)", con);
cmd.Parameters.AddWithValue("@ID", 1);
//原来为cmd.Parameters.AddWithValue("@Name", null)
cmd.Parameters.AddWithValue("@Name",DBNull.Value);//用DBNULL.Value替代
cmd.ExecuteNonQuery();