我做了一个小程序,想实现的功能就是在文本框中输入姓名,点击查询按钮,就能查到ACCESS数据库中此学生的信息(编号,姓名,性别,年龄)可我不知道语法格式,我自己写的语句调试能通过,可是运行时出错(点击查询按钮时)。
我的语句如下:
string txt2 ="selcet * from Student where SutdentName='"+textBox4.Text+"'";
是这句出的语法错误,我觉得。我写的“查找”按钮的代码如下,不知道是否也有错误,请大家指点
private void button2_Click(object sender, EventArgs e)
        {
            if (textBox4.Text == "")
            {
                MessageBox.Show("请输入要查找的学生的姓名");
                return;
            }
            string txt1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Student1.mdb";
            string txt2 ="selcet * from Student where SutdentName='"+textBox4.Text+"'";
            OleDbConnection conn = new OleDbConnection(txt1);
            conn.Open();
            DataTable dt = new DataTable();
           OleDbDataAdapter dar=new OleDbDataAdapter(txt2,conn);
           dar.Fill(dt);
           dataGridView1.DataSource = dt.DefaultView;        }

解决方案 »

  1.   

    问题出错在哪一句?是“conn.Open()”还是“dar.Fill(dt);”?
    ACCESS连接字符串有问题,没有指定路径,SQL语句没什么问题,不过这样直接拼SQL语句不好,应采用传递参数的方式,否则容易遭受注入式攻击。
      

  2.   

    没看出错误。不过。连接没关闭。
    conn.Close(); DEBUG 看看具体错在什么地方了。
      

  3.   

    string txt2 ="selcet * from Student where SutdentName='"+textBox4.Text+"'"; 把这句改一下
    string txt2 ="selcet * from Student where (SutdentName=@SutdentName)
    OleDbCommand oledbcmd1 = new OleDbCommand(txt2, oledbcon);
    oledbcmd1.Parameters.Add("@SutdentName", OleDbType.Integer).Value = textBox4.Text;
    看看可不可以
      

  4.   

    是dar.Fill(dt)出的错,提示:
    未处理 System.Data.OleDb.OleDbException
      Message="至少一个参数没有被指定值。"
      Source="Microsoft JET Database Engine"
      ErrorCode=-2147217904