【问题标题】:Display Local database c#显示本地数据库 c#
【发布时间】:2014-11-07 12:04:55
【问题描述】:

我在显示我的数据库表中的内容时遇到问题。我已按照课堂指示进行操作,但我被困了 2 天没有成功!

这是我到目前为止所做的;

string conStr = @"Data Source=C:\Users\secwp_000\documents\visual studio 2012\Projects\Module5\Module5\Orderdatabase.sdf";


SqlCeConnection con = new SqlCeConnection(conStr);
SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Order", con);
SqlCeDataAdapter adapt = new SqlCeDataAdapter(cmd);
DataSet ds = new DataSet();
adapt.Fill(ds, "Order");

foreach (DataTable dt in ds.Tables)
{
    foreach (DataRow row in dt.Rows)
    {
       foreach (DataColumn column in dt.Columns)
       {
            Console.WriteLine(row[column]);
       }
    }
}

当我运行代码时,我在 adapt.Fill(ds, "Order"); 上出现错误,说 An unhandled exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll。我不太明白。

编辑:我的数据连接是;

数据连接 订单数据库.sdf 表 命令 列 订单编号 ETC..

为 Nicks 解决方案添加输出:

System.Data.SqlServerCe.SqlCeException (0x80004005):解析查询时出错。 [令牌行号=1,令牌行偏移量=21,错误令牌=订单] vid System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 小时) vid System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan() vid System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior 行为,String 方法,ResultSetOptions 选项) vid System.Data.SqlServerCe.SqlCeCommand.ExecuteDbDataReader(CommandBehavior 行为) vid System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(命令行为行为) vid System.Data.Common.DbDataAdapter.FillInternal(DataSet 数据集,DataTable [] 数据表,Int32 startRecord,Int32 maxRecords,String,srcTable,IDbCommand 命令,CommandBehavior 行为) vid System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32 startRecord,Int32 maxRecords,字符串 srcTable,IDbCommand 命令,CommandBehavior 行为) vid System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) vid Module5.Program.Main(String[] args) i c:\Users\secwp_000\Documents\Visual Studio 2012\Projects\Module5\Module5\Program.cs:rad 54

编辑:这是 atm 的图片。 http://oi61.tinypic.com/9pq70l.jpg

【问题讨论】:

  • 欢迎来到 Stack Overflow。堆栈跟踪到底是什么?请阅读FAQHow to Askhelp center 作为开始..
  • 谢谢!对不起,我从来没有遇到过这个词。所以我不知道。
  • 尝试在您的adapter.fill 周围放置一个try catch 语句。在您的 catch 语句中,将您的 e 放入一个消息框中,它将为您提供有关您的错误的更多信息。也是一件愚蠢的小事:您确定您的表 Order 在您的数据库中使用大写字母吗?愚蠢的错误,但我已经犯过很多次了。
  • 不幸的是,我无法发布图片,但在服务器资源管理器中的表格下,表格名为“订单”。我不知道在 catch 之后要写什么,我们已经处理过大麦。
  • 像这样使用它:尝试 { adapt.fill(ds, "Order"); } catch (Exception e) {Messagebox.Show(e.toString());}

标签: c# database visual-studio-2012 sql-server-ce adapter


【解决方案1】:

您需要将表名括在括号中,因为这是保留字:

SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM [Order]", con);

而且使用 SELECT * 从来都不是一个好主意

【讨论】:

    【解决方案2】:

    首先SELECT * from Order是一个庞大的数据集合,我建议你试试这个:

            SqlConnection con = new SqlCeConnection(conStr);
            using(con)
            {
            SqlCommand cmd = new SqlCeCommand("SELECT OrderID FROM Order", con);
            string OrderID = cmd.ExecuteScalar().ToString();
            Console.WriteLine(OrderID);
            }
    

    如果这成功了,那么继续使用 foreach 执行以使用 SELECT * FROM ORDER 访问所有行和列

    【讨论】:

    • 我得到“ExecuteScalar 需要一个打开且可用的连接。连接的当前状态是关闭。”我猜数据库没有以某种方式连接? :S
    • 使用 (con) { con.Open();字符串 orderID = cmd.executeScaler().ToString(); }
    • @NickOtten 使用该代码行,我在“...string orderID = cmd.ExecuteScalar().ToString();..”上收到错误消息,说“'System.Data 类型的未处理异常。 System.Data.SqlServerCe.dll 中发生 SqlServerCe.SqlCeException'"
    • @SandySands 找不到该类型或命名空间。我只能写SqlCeCommand
    • 命名空间:System.Data.SqlClient 并添加到参考框架和参考扩展中
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2014-08-29
    • 2012-07-06
    相关资源
    最近更新 更多