gpt4 book ai didi

c# - c# 中的 sql 查询中的索引(从零开始)

转载 作者:行者123 更新时间:2023-11-29 01:35:32 25 4
gpt4 key购买 nike

我不明白这个 sql 查询中的这个错误。

错误是

Index (zero based) must be greater than or equal to zero

我的 C# 代码错误是:

        sql = @String.Format(" UPDATE `tbl_csv` ");
sql += String.Format(" SET ");
sql += String.Format(" xAAA = 1, ");
sql += String.Format(" xBBB = {0}, ");
sql += String.Format(" xCCC = {1}, ");
sql += String.Format(" xDDD = {2} ");
sql += String.Format(" WHERE Id IN ({3}); ",
ddlBBB.SelectedValue.ToString(),
ddlCCC.SelectedValue.ToString(),
ddlDDD.SelectedValue.ToString(),
Base64ForUrlDecode(Request.QueryString["sId"].ToString()));

但是如果尝试这个不同版本的 sql 查询我没有错误并且查询的输出是正确的:

        sql = @String.Format(" UPDATE `tbl_csv` ");
sql += String.Format(" SET ");
sql += String.Format(" xAAA = 1, ");
sql += String.Format(" xBBB = '" + ddlBBB.SelectedValue.ToString() + "', ");
sql += String.Format(" xCCC = '" + ddlCCC.SelectedValue.ToString() + "', ");
sql += String.Format(" xDDD = '" + ddlDDD.SelectedValue.ToString() + "' ");
sql += String.Format(" WHERE Id IN (" + Base64ForUrlDecode(Request.QueryString["sId"].ToString()) + "); ",
ddlBBB.SelectedValue.ToString(),
ddlCCC.SelectedValue.ToString(),
ddlDDD.SelectedValue.ToString(),
Base64ForUrlDecode(Request.QueryString["sId"].ToString()));

输出:

UPDATE `tbl_csv`
SET xAAA = 1,
xBBB = 'N',
xCCC = 'N',
xDDD = 'N'
WHERE
Id IN ('2357');

如何解决这个问题?

你能帮帮我吗?

在此先感谢您的帮助,非常感谢。

最佳答案

假设您实际看到:

Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

这是因为您还没有为 string.Format 提供任何 - 即

string s = string.Format("add {0} and {1}", "foo", 123);
// s now == "add foo and 123"

但是!在您的情况下,添加值不是一个很好的解决方法 - 您应该使用 SQL 参数,而不是连接。 不好的修复是这样的:

string sql = string.Format(@"
UPDATE `tbl_csv`
SET xAAA = 1, xBBB = {0},
xCCC = {1}, xDDD = {2}
WHERE Id IN ({3});",
ddlBBB.SelectedValue.ToString(),
ddlCCC.SelectedValue.ToString(),
ddlDDD.SelectedValue.ToString(),
Base64ForUrlDecode(Request.QueryString["sId"].ToString()));

好的修复应该是这样的:

const string sql = @"
UPDATE `tbl_csv`
SET xAAA = 1, xBBB = @xBBB,
xCCC = @xCCC, xDDD = xDDD
WHERE Id IN (@Id);"

向您的命令添加适当的 ADO.NET 参数,注意 IN 通常不喜欢参数,除非您的数据库具有某种“拆分”功能,并且不同的服务器有不同的表达方式参数 - 而不是 @foo,它可能是 :foo,或者只是 ? 等。

关于c# - c# 中的 sql 查询中的索引(从零开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223331/

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