作为学习的一部分,我正在做一个.net单元。我才刚开始,有一位讲师说我没能给.NET提供最坚实的基础,所以请原谅我的笨拙。
我正在制作一个非常简单和通用的数据库驱动应用程序。我正在使用c,我正在访问一个microsoft access 2007数据库。
我把数据库的东西放在它自己的类中,方法只是抛出我用来提交的oledbdataadapters。我提供任何从主程序执行数据集对象查询的方法,这是我保存数据的地方(数据库中有多个表)。
我制作了一个非常通用的私有方法,用于执行sql select查询,并使用一些公共方法包装该方法以获取产品、订单等(它是一个通用零售数据库)。
泛型方法使用单独的connect方法来实际建立连接,如下所示:

private static OleDbConnection Connect()
{
    OleDbConnection conn = new OleDbConnection(
        @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Temp\db.accdb");
    return conn;
}

通用方法如下:
private static OleDbDataAdapter GenericSelectQuery(
    DataSet ds, string namedTable, String selectString)
{
    OleDbCommand oleCommand = new OleDbCommand();
    OleDbConnection conn = Connect();
    oleCommand.CommandText = selectString;
    oleCommand.Connection = conn;
    oleCommand.CommandType = CommandType.Text;

    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand = oleCommand;
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    adapter.Fill(ds, namedTable);

    return adapter;
}

包装器方法只传递它们从主程序接收的数据集,namedtable字符串是数据集中表的名称,您传递希望进行的查询。
不管我给它哪个查询(甚至是select*from tablename之类的简单查询),我仍然会被抛出一个oledbexception,指出查询的from子句有错误。我只是使用access构建查询,但仍然没有用。很明显我的代码有问题,这并不会让我吃惊。
下面是一些我正在使用的包装方法。
public static OleDbDataAdapter GetOrderLines(DataSet ds)
{
    OleDbDataAdapter adapter = GenericSelectQuery(
        ds, "orderlines", "SELECT OrderLine.* FROM OrderLine;");
    return adapter;
}

它们看起来都一样,只是sql发生了变化。

最佳答案

您是否尝试过更简单的方法来查看您是否与要查找的表有连接。有点像

  DataSet ds = new DataSet();
  using (OleDbConnection myConnection = new OleDbConnection
         (@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Temp\db.accdb"))
            {
            myConnection.Open();
            OleDbDataAdapter myAdapter = new OleDbDataAdapter("SELECT OrderLine.* FROM OrderLine;, myConnection);
            myAdapter.TableMappings.Add("Table", "TestTable");
            myAdapter.Fill(ds);
            }

然后从那里检查是否有
  ds.Tables[0].Rows.Count()

这实际上会告诉你,如果你击中数据库并得到结果。从那里你可以使它更优雅

10-04 21:02
查看更多