为什么我的SQLCeCommand ExecuteReader失败了?

时间:2013-03-21 23:34:39

标签: c# compact-framework sql-server-ce windows-ce

使用以下代码,我得到一个不太有用的错误消息(我在异常对话框的截断标题栏中看到的错误消息是“System.Data.SQLServer ...”)

string query = "SELECT * FROM EVERYTHING";
SqlCeCommand cmd = new SqlCeCommand(query);
SqlCeConnection conn = new SqlCeConnection(myConnStr); 
conn.Open();
cmd.Connection = conn;
SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // <-- Blows up bigger than an Augustus Gloop pinata

更新

我补充说:

MessageBox.Show(string.Format("query is {0}", query));

...对于失败的查询进行了一次健全性检查,最后发现现在我的工作区域都散布着一堆头发。我有这个来提供查询:

string vendorId = txtVendor.ToString().Trim();

......而不是:

string vendorId = txtVendor.Text.ToString().Trim();

...因此查询是“ SELECT BLA FROM BLA WHERE BLA = System.Windows.Forms.Label

现在我至少要对“行/列没有数据”错误信息。

1 个答案:

答案 0 :(得分:1)

我不确定CF是否支持CommandBehavior.CloseConnection选项。

你能这样写吗?

string query = "SELECT * FROM EVERYTHING";
var table = new DataTable();
using (var cmd = new SqlCeCommand(query, new SqlCeConnection(myConnStr)); {
  try {
    cmd.Connection.Open();
    table.Load(cmd.ExecuteReader());
  } catch (SqlException err) {
    Console.WriteLine(err.Message); // <= Put a Break Point here.
  } finally {
    cmd.Connection.Close();
  } 
}
object col1 = null;
string strCol2 = null;
if (0 < table.Rows.Count) {
  col1 = table.Rows[0][0];
  object obj = table.Rows[0][1];
  if ((obj != null) && (obj != DBNull.Value)) {
    strCol2 = obj.ToString();
  }
}

编辑:添加 DataTable ,并阅读Row[0]中的2个项目。