C# 从 Access 数据库读取数据

发布于 2024-10-10 11:57:15 字数 845 浏览 0 评论 0原文

您好,想从给定 ID 的数据库中读取数据(不是 Premanent)。我正在使用以下代码:

        OleDbConnection co = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb");
        co.Open();
        **OleDbCommand cmd = new OleDbCommand("SELECT * FROM Category1 Where ID = '"+textBox1.Text+"'", co);**
        OleDbDataReader reader = cmd.ExecuteReader();

        int i = 1;
        while (reader.Read())
        {
            ListViewItem li = new ListViewItem(i.ToString());
            li.SubItems.Add(reader.GetString(1));
            li.SubItems.Add(reader.GetString(2));
            li.SubItems.Add(reader.GetString(3));
            li.SubItems.Add(reader.GetString(4));
            listView1.Items.Add(li);
            i++;
        }

但它在代码的粗体行上显示一条错误消息:

条件表达式中的数据类型不匹配。

Hi want to read data from data base from the given ID (not Premanent). I am using the following code:

        OleDbConnection co = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb");
        co.Open();
        **OleDbCommand cmd = new OleDbCommand("SELECT * FROM Category1 Where ID = '"+textBox1.Text+"'", co);**
        OleDbDataReader reader = cmd.ExecuteReader();

        int i = 1;
        while (reader.Read())
        {
            ListViewItem li = new ListViewItem(i.ToString());
            li.SubItems.Add(reader.GetString(1));
            li.SubItems.Add(reader.GetString(2));
            li.SubItems.Add(reader.GetString(3));
            li.SubItems.Add(reader.GetString(4));
            listView1.Items.Add(li);
            i++;
        }

but it shows me an error message on the Bold line of code:

Data type mismatch in criteria expression.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小糖芽 2024-10-17 11:57:15

ID字段是数字吗?您正在将它与字符串进行比较。这可能是问题的一部分。

Is the ID field numeric? You are comparing it to a string. That might be part of the problem.

余生一个溪 2024-10-17 11:57:15

就像其他人说的:听起来很像 ID 不是字符串。
但是,在将用户输入或任何变量添加到 SQL 语句中时,您应该使用参数: http://weblogs.sqlteam.com/jeffs/archive/2006/07/21/10728.aspx

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Category1 WHERE id = @id", co);
cmd.Parameters.AddWithValue("@id", textBox1.Text);

Like other people said: it sounds very much like ID isn't a string.
However you should use parameters when adding user input or any variables to your SQL statement: http://weblogs.sqlteam.com/jeffs/archive/2006/07/21/10728.aspx

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Category1 WHERE id = @id", co);
cmd.Parameters.AddWithValue("@id", textBox1.Text);
瑕疵 2024-10-17 11:57:15

就像其他人说的:听起来工作很好

string strDSN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Db1.accdb";
string strSQL = "SELECT * FROM Tbl1" ;
// create Objects of ADOConnection and ADOCommand
OleDbConnection myConn = new OleDbConnection(strDSN);
OleDbDataAdapter myCmd = new OleDbDataAdapter( strSQL, myConn ); 
myConn.Open();
DataSet dtSet = new DataSet();
myCmd.Fill( dtSet, "Tbl1" );
DataTable dTable = dtSet.Tables[0];
foreach( DataRow dtRow in dTable.Rows )
{
    listBox1.Items.Add( dtRow["id"].ToString());
    listBox2.Items.Add( dtRow["nm"].ToString());
    listBox3.Items.Add(dtRow["ag"].ToString());
}

Like other people said: it sounds very good working

string strDSN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Db1.accdb";
string strSQL = "SELECT * FROM Tbl1" ;
// create Objects of ADOConnection and ADOCommand
OleDbConnection myConn = new OleDbConnection(strDSN);
OleDbDataAdapter myCmd = new OleDbDataAdapter( strSQL, myConn ); 
myConn.Open();
DataSet dtSet = new DataSet();
myCmd.Fill( dtSet, "Tbl1" );
DataTable dTable = dtSet.Tables[0];
foreach( DataRow dtRow in dTable.Rows )
{
    listBox1.Items.Add( dtRow["id"].ToString());
    listBox2.Items.Add( dtRow["nm"].ToString());
    listBox3.Items.Add(dtRow["ag"].ToString());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文