gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:34:21 26 4
gpt4 key购买 nike

有没有办法向我的 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: The parameterized query '(@id,@name) ' expects the parameter '@id', which was not supplied

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

最佳答案

Is there a way to add a parameter to my SqlCommand in a way that the engine will not complain if it's not used in my query?

如果您添加了一个参数但没有使用它,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

关于c# - 添加更多参数然后在查询中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com