【问题标题】:using WHERE in my Insert query statement在我的插入查询语句中使用 WHERE
【发布时间】:2014-01-22 20:53:18
【问题描述】:
string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;
           Data Source=C:\Users\user\Documents\Visual Studio 2010\Projects\Timetable\Timetable\bin\Debug\timetabledata.accdb";

//create the database query
string query = "SELECT * FROM relation";

OleDbConnection conn = new OleDbConnection(conString);
conn.Open();

// create the DataSet
DataSet ds = new DataSet();

// create the adapter and fill the DataSet
OleDbDataAdapter adapter;
adapter = new OleDbDataAdapter(query, conn);
adapter.Fill(ds);

int f = ds.Tables[0].Rows.Count;
int i;
for (i = 0; i < f; i++)
    {
     // create the database query
     string query1 = "SELECT * FROM [time] Where classid= '"+
                               ds.Tables[0].Rows[i].ItemArray[2]+"'";
     DataSet ds1 = new DataSet();
     OleDbDataAdapter adapter1;
     adapter1 = new OleDbDataAdapter(query1, conn);
     adapter1.Fill(ds1);
     MessageBox.Show(ds1.Tables[0].Rows[0].ItemArray[0].ToString());
     }

我在消息框中得到的结果不是真的,我希望所有行的 id 具有相同的 classid,但在消息框中我只是在继续之前进行验证,我看到时间表的 id 而没有考虑在哪里

【问题讨论】:

  • 这里不要假设 SQL 引擎有问题。您在代码中某处做出错误假设的可能性更多。做一些调试来找出什么。检查运行时查询,使用和不使用 WHERE 子句对数据库手动运行该查询,检查结果。在不了解您的数据的情况下,我们不可能知道这里的值应该是什么。
  • 谢谢..我做了但没有结果..我再试一次
  • 我使用“like”而不是“=”,我得到了我想要的结果,但这是真的吗?

标签: c# select oledb where-clause


【解决方案1】:

这部分不应该改成...

string query1 = "SELECT * FROM [time] Where classid+ '"+
                               ds.Tables[0].Rows[i].ItemArray[2]+"'";

到...

string query1 = "SELECT * FROM [time] Where classid = '"+
                               ds.Tables[0].Rows[i].ItemArray[2]+"'";

您似乎使用的是加号 (+) 而不是等号 (=)。

【讨论】:

  • 我编辑..这不是问题..我在我的代码中写正确
  • 肯定是问题之一,ds.Tables[0].Rows[i].ItemArray[2]的值是多少?
  • 它的每个 'i' 的 classid 我都有一个值:1-4-5-7-4-3-1
  • 当我用like代替=时,我得到了真实的结果:使用它是真的
【解决方案2】:

试一试:

public DataSet GetRelations()
{
    using (var connection = new OleDbConnection(ConnectionString))
    {
        connection.Open();
        using (var adapter = new OleDbDataAdapter("SELECT * FROM [relation]", connection))
        {
            var results = new DataSet();
            adapter.Fill(results);
            return results;
        }
    }
}

public DataSet GetTimeResults()
{
    DataSet dsRelations = GetRelations();

    var dsResults = new DataSet();
    using (var connection = new OleDbConnection(ConnectionString)) 
    {
        connection.Open();

        foreach (DataRow row in dsRelations.Tables[0].Rows)
        {
            using (var command = new OleDbCommand("SELECT * FROM [time] Where classid = ?", connection))
            {
                // not entirey sure what the value of row.ItemArray[2] is ?
                command.Parameters.Add(row.ItemArray[2]);
                using (var adapter = new OleDbDataAdapter(command))
                {
                    adapter.Fill(dsResults);
                }
            }
        }
    }
    return dsResults;
}

只要调用它并在你认为合适的时候使用它:

public void Test()
{
    DataSet dsTimeResults = GetTimeResults();
    // Do whatever you need with the results
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多