我不理解这个sql查询中的错误。
错误是
索引(从零开始)必须大于或等于零
我的错误代码是:
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');
如何解决这个问题?
你能帮助我吗?
提前感谢您的帮助,非常感谢。
2条答案
按热度按时间lmyy7pcs1#
必须将正确的参数添加到每个单独的
string.format
功能。不能只将参数添加到最后一个函数中。所有函数都会自行解析,然后添加到字符串中。
另外,在sql查询中直接从网页添加值时,应该非常小心。如果要直接在数据库上执行这些查询,则应始终对输入进行编码。
tgabmvqs2#
假设你真的看到了:
未处理的异常:system.formatexception:索引(基于零)必须大于或等于零且小于参数列表的大小。
这是因为您尚未向提供任何值
string.Format
-即。然而!在您的情况下,添加值并不是一个好的解决方案-您应该使用sql参数,而不是串联。坏的解决办法是:
好的解决办法是:
在命令中添加适当的ado.net参数,注意
IN
通常不喜欢参数,除非您的数据库具有某种“拆分”功能,而且不同的服务器有不同的表示参数的方式—而不是@foo
可能是的:foo
,或者只是?
等等。