有没有一种方法可以将参数添加到我的SqlCommand中,以使引擎在我的查询中不使用它时也不会抱怨?
我的查询中包含大约50个参数,但是需要包含哪些参数在很大程度上取决于情况。如果我可以将它们全部放在顶部并在添加参数之后构建查询,则可以轻松删除200行代码。
一个非常简单/愚蠢/错误的示例(是的,这里的解决方案是将id添加到else子句中)
cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
cmd.Parameters.Add("@name", SqlDbType.nVarChar, 250).Value = name;
if(id == null) cmd.CommandText = "INSERT INTO tab (name) VALUES (@name)";
else cmd.CommandText = "UPDATE tab SET name = @name WHERE id = @id";
这将返回错误:
System.Data.SqlClient.SqlException:参数化查询'(@ id,@ name)'需要参数'@id',但未提供
如果不可能,则只需接受一个简单的“否”作为答案。
有没有一种方法可以将参数添加到我的SqlCommand中,以使引擎在我的查询中不使用它时也不会抱怨?
如果您添加参数并且不使用它,ADO.NET不会抱怨。您报告的错误消息是因为您尝试使用未添加的参数-相反的情况。最有可能id
是null
。null
不会添加值为的参数-您需要使用DBNull.Value
:
cmd.Parameters.Add("@id", SqlDbType.Int).Value = ((object)id) ?? DBNull.Value;
cmd.Parameters.Add("@name", SqlDbType.nVarChar, 250)
.Value = ((object)name) ?? DBNull.Value;
另外,“ dapper”之类的工具也可以简化此操作:
conn.Execute(sql, new { id, name }); // job done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句