有没有办法在我的SqlCommand中添加一个参数,如果在我的查询中没有使用它,引擎就不会抱怨?
我有大约50个参数要包含在我的查询中,但需要包含哪些参数在很大程度上取决于具体情况.我可以轻松地删除200行代码,如果我可以将它们全部置于顶部并在添加我的参数后构建我的查询.
一个非常简单/愚蠢/错误的例子(是的,这里的解决方案是在else子句中添加id)
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";
Run Code Online (Sandbox Code Playgroud)
这会返回错误:
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;
Run Code Online (Sandbox Code Playgroud)
或者,像"dapper"这样的工具可以轻松实现:
conn.Execute(sql, new { id, name }); // job done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112 次 |
最近记录: |