如何修复“索引(基于零)必须大于或等于零”错误[重复]

Posted

技术标签:

【中文标题】如何修复“索引(基于零)必须大于或等于零”错误[重复]【英文标题】:How to fix "Index (zero based) must be greater than or equal to zero" error [duplicate] 【发布时间】:2019-09-06 03:22:46 【问题描述】:

我正在尝试编辑用户详细信息并尝试在数据库表中更新。所以我使用用户名和密码登录,然后我在重定向页面上获取所有用户详细信息。但我无法编辑详细信息也无法在数据库中更新。我需要在哪里更改代码中的功能。 在数据库表字段中,DOB 通过 calendar.same 与 LastDonated Field 取值。

我已经尝试了下面的代码来实现我的输出结果。

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\BBMS\BloodBank\App_Data\Database.mdf;Integrated Security=True");

SqlCommand cmd = new SqlCommand(string.Format("UPDATE DonorRegist SET FullName='1', Gender='2', DOB='3', BloodGroup='4',Weight='5', Email='6', Country='7', State='8',City='9', Address='10', Pincode='11', ContactNo='12', LastDonated='13',DonorPassword='15' WHERE UserName='14'", txtdonorname.Text, rblgender.SelectedValue, txtDOB.Text, ddlBG.SelectedValue, txtbodywt.Text, txtdonoremail.Text, ddlCountry.SelectedValue, ddlState.SelectedValue, ddlCity.SelectedValue, txtdonoradd.Text, txtpin.Text, txtdonorcontact.Text, txtlastdonate.Text, txtUserName.Text, txtPassword.Text), con);

con.Open();
cmd.ExecuteNonQuery();
con.Close();

我希望输出在我编辑某些字段值时应该在相应的数据库表中得到更新。

【问题讨论】:

【参考方案1】:

您的问题是String.Format 期望您以 0 作为索引开始:

string.Format("UPDATE DonorRegist SET FullName='0' ...", conn);

但是你可以用字符串插值来简化它:

new SqlCommand($"UPDATE DonorRegist SET FullName='txtdonorname.Text', ...", conn);

甚至更好 - 如果您使用 sql 参数 - 这样您就可以避免 SQL 注入!

cmd = new SqlCommand($"UPDATE DonorRegist SET FullName=@donorName, ...", conn);
cmd.Parameters.Add("@donorName", SqlDbType.String);
cmd.Parameters["@ID"].Value = txtdonorname.Text;

最后 - 最后的建议是使用 using - 避免忘记在你的实例中处置你用过的资源 ​​- SqlConnection

【讨论】:

以上是关于如何修复“索引(基于零)必须大于或等于零”错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Laravel 7 重定向导致 405 错误?

当应用程序在本地运行时如何修复 PHP 上的重定向错误

如何修复 Typescript 编译错误 ts2345“类型 'Response' 丢失......来自'Response'类型:重定向、预告片、formData!”

如何修复 Java Web 应用程序中 JSP 重定向中的 HTTPS-HTTP 混合内容错误

如何修复“[Lp002]:IAR ARM 工具重定位失败?

如何修复 Liferay 7.4.2 中禁止的 URL 重定向?