0

访问 2003 与 2010 C#

我的 WHERE 子句有问题。最初我使用 OR 但现在意识到它必须与 WHERE 我没有做对的事情有关,还是其他事情?请有人可以在这里帮助我。提前致谢。ps c sharp student 以前帮过我。

学生表

字段名称数据类型

 ID         Number 
 FirstName  Text
 LastName   Text
 StudentDOB Date/Time
 Course     Text

连接字符串:

myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\StudentDB.mdb");

btn查找方法...

private void btnFind_Click(object sender, EventArgs e)
    {
        string title = txtSearch.Text.ToString();
        string queryString = "SELECT * FROM StudentTable WHERE ID = ?"; //I have also tried WHERE ID = @ID without success

        OleDbCommand command = new OleDbCommand();
        command.CommandText = queryString;
        command.Connection = myCon;
        myCon.Open();
        OleDbDataReader dr = command.ExecuteReader();
        while (dr.Read())
        {
            txtStudID.Text += String.Format("ID: {0}\n", dr["ID"].ToString());
            txtFirstName.Text += String.Format("FirstName: {0}\n", dr["FirstName"].ToString());
            txtLastName.Text += String.Format("LastName: {0}\n", dr["LastName"].ToString());
            txtStudDOB.Text += String.Format("StudentDOB: {0}\n", dr["StudentDOB"].ToString());
            txtCourse.Text += String.Format("Course: {0}\n", dr["Course"].ToString());

        }
        myCon.Close();

    }

我的删除方法是这样的,没有问题(我想你可能想知道)......

 private void btnDelete_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "DELETE FROM StudentTable WHERE txtStudID = ?";
        cmd.Parameters.AddWithValue("@ID", txtStudID.Text);
        cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
        cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
        cmd.Parameters.AddWithValue("@StudDOB", txtStudDOB.Text);
        cmd.Parameters.AddWithValue("@Course", txtCourse.Text);

        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();

    }

我在Access中测试了sql查询没有问题...

SELECT StudentTable.ID
FROM StudentTable
WHERE (((StudentTable.ID)=1));

找到解决方案

我从这个链接中找到了一个解决方案,当然是从stackoverflow....

这里

感谢大家的宝贵时间,尤其是布拉德。

布拉德 - 这是代码

private void btnFind_Click(object sender, EventArgs e)
    {

        using (var command = myCon.CreateCommand())
        {
            command.CommandText = "select * from StudentTable where ID = @ID";
            command.Parameters.AddWithValue("ID", int.Parse(txtSearch.Text));

            myCon.Open();
            var reader = command.ExecuteReader();

            while (reader.Read())
            {
                txtStudID.Text = reader["ID"].ToString();
                txtFirstName.Text = reader["FirstName"].ToString();
                txtLastName.Text = reader["LastName"].ToString();
                txtStudDOB.Text = reader["StudentDOB"].ToString();
                txtCourse.Text = reader["Course"].ToString();

            }
        }       myCon.Close();
                myCon.Close();

      }

我实际上可能不会使用 OR 子句——这样就可以了。

4

3 回答 3

0

Solution found as updated in bold heading solution found. I am receiving a msg saying I can close this thread tomorrow.

于 2013-03-13T18:24:40.680 回答
0

你没有在你的Select

command.Parameters.AddWithValue("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = int.Parse(txtStudID.Text);

此外,您有很多参数,Delete但只使用其中一个。那是一个转录错误还是 do @FirstName, @LastName,@StudDOB并且@Course实际上没有使用?@ID只是碰巧被正确使用,因为它是第一个。

于 2013-03-12T20:06:21.603 回答
0

您的 SQL 查询包含一个参数标记(?),但您从未为其指定值。您的 delete 方法可以正确执行(调用集合),但即使AddWithValueParameters那里,您也为查询添加了太多参数。

您需要更加熟悉 OLEDB 参数化查询。您应该从这里开始并查看示例。

于 2013-03-12T20:06:58.130 回答