添加更多参数然后在查询中使用?

Tie*_*rcq 2 c# sql

有没有办法在我的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',这是未提供的

如果不可能,简单的"否"就足以被接受为答案.

Mar*_*ell 6

有没有办法在我的SqlCommand中添加一个参数,如果在我的查询中没有使用它,引擎就不会抱怨?

如果添加参数并且不使用它,ADO.NET不会抱怨.您报告的错误消息是因为您尝试使用添加的参数- 相反的情况.最有可能的idnull.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)