0

私はこのようなコードを持っています:

DataSet QtyDS = null;
. . .
QtyDS = GetAllUPCDSDRecords(txtUPC.Text);

...それは「テーブル0が見つかりません」で爆発しています

それを防ぐために、私は次のことを試みましたが、まったく役に立ちませんでした。データセットの最初のテーブルにアクセスしようとすると、まだそのerrmsgが表示されます。

1)

if (null != QtyDS)

2)

string table0 = QtyDS.Tables[0].ToString();
if (!table0.Equals(string.Empty))

3)

if (null != QtyDS.Tables[0])

エラーメッセージを回避するために、クエリがデータセットを返しているかどうかを安全に判断するにはどうすればよいですか?

アップデート

public DataSet getAllUPCDSDRecords(string upc)
{
    string query = string.Format(
        "SELECT tyger_id as tyger, upc_source as UPC, description as Descrip, unit_qty as Qty, "+
        "department as Dept, vendor_id as Ven, upc_pack_size as UPCPK, pack_size as PKSize, "+
        "unit_cost as Cst, unit_list as Lst "+
        "FROM {0} WHERE upc_source = {1}", tablename, upc);
    return dbconn.getDataSet(query);
}

public DataSet getDataSet( string dynSQL )
{
    checkConnection();

    SqlCeDataAdapter oDA = new SqlCeDataAdapter( dynSQL, objCon );
    DataSet          oDS = new DataSet( "Command" );

    try
    {
        oDA.Fill( oDS );
    } 
    catch
    {
        //SSCS.ExceptionHandler(ex, "DBConnection.getDataSet");
    }

    return( oDS );
} // getDataSet
4

2 に答える 2

1

コードの残りの部分が表示されない場合、クエリは何も返さないと思います。にブレークポイントを設定してreturn( oDS );、何oDSを言っているかを確認してください。何も含まれていない場合は、クエリが正しく機能していません。

クエリ構文または接続文字列を確認する必要がある場合があります。

また、をチェックするとテーブル数を確認できますQtyDS.Tables.Count。0より大きい場合は、テーブルがあります。

于 2013-03-26T23:13:01.837 に答える
1

エラーを飲み込んで無視しているように見えます。これにより、コードが正常に実行されているのに正常に実行されていると思われる可能性があります。

コメントを削除します。

public DataSet getDataSet( string dynSQL )
{
  checkConnection();

  SqlCeDataAdapter oDA = new SqlCeDataAdapter( dynSQL, objCon );
  DataSet          oDS = new DataSet( "Command" );

  try
  {
      oDA.Fill( oDS );
  } 
  catch (Exception ex)
  {
      Console.WriteLine(ex.Message);
  }

  return( oDS );
}

Console.WriteLineエラーが何であるかを読み取るには、にブレークポイントを設定するだけです。それが修正されたら、try...catchルーチン全体を削除して、何かが失敗した場合にそれが隠されないようにする必要があります。

さらに一歩進めるには、署名を変更し、そのcheckConnectionメソッドにチェックを入れます。

public DataSet getDataSet( string dynSQL )
{
  var oDS = new DataSet("Command");
  try
  {
    if (!checkConnection()) {
      throw new Exception("No connection to database.");
    }
    using (var oDA = new SqlCeDataAdapter(dynSQL, objCon)) {
      oDA.Fill(oDS);
    }
  } 
  catch (Exception ex)
  {
      Console.WriteLine(ex.Message);
  }

  return( oDS );
}
于 2013-03-27T13:30:12.470 に答える