试图从sql获取数据到文本框。位置0异常

时间:2018-05-02 18:28:40

标签: c# sql-server localdb

 public void doldur()
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Odev.mdf;Integrated Security=True");
        con.Open();

        SqlDataAdapter da = new SqlDataAdapter("Select * From ogrenciler Order By adsoyad ASC", con);
        DataSet dts = new DataSet();

        da.Fill(dts, "ogrenciler");
        comboBox1.DataSource = dts.Tables["ogrenciler"];
        comboBox1.ValueMember = "adsoyad";
        comboBox1.DisplayMember = "adsoyad";

        comboBox2.DataSource = dts.Tables["ogrenciler"];
        comboBox2.ValueMember = "adsoyad";
        comboBox2.DisplayMember = "adsoyad";

        con.Close();
    }

- combobox2正确获取数据 -

 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();
    }

在这里我得到:

  

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

我检查了我的表,以确定我是否写了正确的SQL语句。(一切都正确)  然后我意识到我的dataadapter或数据集实际上没有数据。这就是为什么我无法填写我的文本框。我尝试使用datatable / rows.count,executioncalar,datareader / dr.read,executereader。这些都没有奏效。然后我开始怀疑我的SQL语句。  不知道如何解决。这种语言的新手。我受够了。请帮帮我。

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

编辑1:我刚发现如果我的combobox2的值包含“ı,ş,ğ”字母(我的第一个值包括“ş”),我收到此错误。

1 个答案:

答案 0 :(得分:1)

解决此问题的正确方法是使用参数化查询。这很容易解决。它可以防止这种类型的错误,并且100%防止sql注入。参数化查询非常简单,不这样做只是懒惰。

generate_loop: for I in 0 to 15 generate
begin
  comp_inst: my_component
  generic map
  (
    FOO => 0 when I < 8 else 4096
  )
  port map
  (
  ...
  );
end generate;