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的值包含“ı,ş,ğ”字母(我的第一个值包括“ş”),我收到此错误。
答案 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;