Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试从sql将数据获取到textbox。位置0处没有行异常_C#_Sql Server_Localdb - Fatal编程技术网

C# 正在尝试从sql将数据获取到textbox。位置0处没有行异常

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、

-combobox2正确获取数据-

-它也在起作用-

在这里我得到:

“System.Data.dll中发生'System.IndexOutOfRangeException'类型的异常,但未在用户代码中处理”(在textbox7行上)

我检查了我的表,以确定我是否编写了正确的SQL语句。(一切都是正确的) 然后我意识到我的dataadapter或dataset实际上没有得到任何数据。这就是为什么我不能填满我的文本框。我尝试使用datatable/rows.count、executescalar、datareader/dr.read、executereader。这些都不起作用。然后我开始怀疑我的SQL语句。 我不知道如何修复。对这种语言是陌生的。我做完了。请帮我做这个

ps:这段代码在2天前运行正常


编辑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();