0

次のコードでは、役に立たないエラー メッセージが表示されます (例外ダイアログの切り捨てられたタイトル バーに表示されるエラー メッセージは、"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」でした

これで、少なくとも「行/列のデータがありません」というエラーメッセージが表示されます。

4

1 に答える 1

1

CommandBehavior.CloseConnectionCF がこのオプションをサポートしているかどうかはわかりません。

このように書けますか?

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を追加し、から 2 つの項目を読み取りますRow[0]

于 2013-03-22T13:02:18.297 に答える