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

本文关键字:查询 然后 参数 添加 | 更新日期: 2023-09-27 18:00:37

是否有一种方法可以将参数添加到我的SqlCommand中,使引擎在查询中不使用时不会抱怨?

我有大约50个参数要包括在我的查询中,但需要包括哪些参数在很大程度上取决于情况。如果我能把200行代码全部放在上面,并在添加params后构建查询,我可以很容易地删除它们。

非常简单/愚蠢/错误。。示例(是的,这里的解决方案是向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";

这会返回错误:

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