C# 正在尝试从sql将数据获取到textbox。位置0处没有行异常
-combobox2正确获取数据- -它也在起作用- 在这里我得到: “System.Data.dll中发生'System.IndexOutOfRangeException'类型的异常,但未在用户代码中处理”(在textbox7行上) 我检查了我的表,以确定我是否编写了正确的SQL语句。(一切都是正确的) 然后我意识到我的dataadapter或dataset实际上没有得到任何数据。这就是为什么我不能填满我的文本框。我尝试使用datatable/rows.count、executescalar、datareader/dr.read、executereader。这些都不起作用。然后我开始怀疑我的SQL语句。 我不知道如何修复。对这种语言是陌生的。我做完了。请帮我做这个 ps:这段代码在2天前运行正常C# 正在尝试从sql将数据获取到textbox。位置0处没有行异常,c#,sql-server,localdb,C#,Sql Server,Localdb,-combobox2正确获取数据- -它也在起作用- 在这里我得到: “System.Data.dll中发生'System.IndexOutOfRangeException'类型的异常,但未在用户代码中处理”(在textbox7行上) 我检查了我的表,以确定我是否编写了正确的SQL语句。(一切都是正确的) 然后我意识到我的dataadapter或dataset实际上没有得到任何数据。这就是为什么我不能填满我的文本框。我尝试使用datatable/rows.count、executescalar、
编辑1:我刚刚发现,如果combobox2的值包括“ı,ş,ğ”字母(我的第一个值包括“ş”),我就出现了这个错误。解决这个问题的正确方法是使用参数化查询。这真的很容易修复。它可以防止这种类型的错误,也可以100%防止sql注入。参数化查询非常简单,不这样做就是懒惰
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
textBox10.Text = "";
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Odev.mdf;Integrated Security=True");
con.Open();
SqlDataAdapter du = new SqlDataAdapter("Select * From ogrenciler Where adsoyad='"+ comboBox2.SelectedValue.ToString() +"'", con);
DataSet dy = new DataSet();
du.Fill(dy, "ogrenciler");
textBox7.Text = dy.Tables[0].Rows[0]["adsoyad"].ToString();
textBox8.Text = dy.Tables[0].Rows[0]["mail"].ToString();
textBox9.Text = dy.Tables[0].Rows[0]["sinif"].ToString();
textBox10.Text = dy.Tables[0].Rows[0]["sube"].ToString();
con.Close();
}
仅供参考,您的代码容易受到SQL注入攻击。你需要防止这些攻击你说这两天前起作用了。如果代码方面没有任何变化,我会检查数据。你可以直接在SQL Server中运行SQL查询以确认是否正常工作/返回数据maccettura除了我之外,没有人会使用此程序。我将在完全本地的基础上工作-布拉德:是的,我试过了,它对SQL查询起作用。那又怎样?参数化查询非常简单。此外,你可以决定让别人使用它。或者,您或其他人可以将代码复制并粘贴到其他地方作为示例。我的朋友bobby tables喜欢这种东西。是的。因为您没有使用参数。这些是unicode字符,字符串文字前面没有N。使用具有正确数据类型的参数可以解决这个问题。或者,您可以继续使用现有的不安全代码。其中adsoyad=N'..仍然是相同的错误。“System.Data.dll中发生了类型为'System.IndexOutOfRangeException'的异常,但未在用户代码中处理。位置0处没有行”“嗯……您的代码甚至不会尝试计算是否有数据。”。如果(dy.Tables[0].Rows.Count>0),通常会将此类内容放在其中。我不能帮你调试你的逻辑。实际运行的查询是什么?表中是否有具有该值的行?我不能为你神奇地解决这个问题。你必须在这里付出一些努力。桌子的结构是什么?一些样本数据怎么样?你要寻找的价值是什么?
private void ogrenci_Load(object sender, EventArgs e)
{
doldur();
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
textBox10.Text = "";
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Odev.mdf;Integrated Security=True");
con.Open();
SqlDataAdapter du = new SqlDataAdapter("Select * From ogrenciler Where adsoyad='"+ comboBox2.SelectedValue.ToString() +"'", con);
DataSet dy = new DataSet();
du.Fill(dy, "ogrenciler");
textBox7.Text = dy.Tables[0].Rows[0]["adsoyad"].ToString();
textBox8.Text = dy.Tables[0].Rows[0]["mail"].ToString();
textBox9.Text = dy.Tables[0].Rows[0]["sinif"].ToString();
textBox10.Text = dy.Tables[0].Rows[0]["sube"].ToString();
con.Close();
}
SqlDataAdapter du = new SqlDataAdapter("Select * From ogrenciler Where adsoyad = @CombBox2", con);
du.SelectCommand.Parameters.Add("@ComboBox2", SqlDbType.NVarChar, 20).Value = comboBox2.SelectedValue.ToString();
DataSet dy = new DataSet();