1

だから私はあなたがそうすることができるさまざまなSql支援クラスを使用してC#で空のDataTableを埋めようとしています。「列名Aが無効です」というエラーが発生しました... DataTableが空であるため、これは意味がありません。列から何も抽出せずに入力しようとしています.

以下で (SQL データベースから) プルしている最初のデータには、cmd2 に見られるように、「A」を含む SKUStockCode セルがあります。DataTable は、以下では containsAllRelatedProductData と呼ばれます。ただし、この「A」を新しい DataTable の列として書き込もうとしているのではなく、SQL データベースでデータを取得しようとしている行の SKUStockCode であるため、「A」を参照しているだけです。

    foreach(char ch in containsRelatedProductsStringOnly.Rows[0]["SKURelatedProducts"].ToString()) 
    {
         if(ch != ' ')
         {
             stockCode = stockCode + ch;
         }
         else
         {
             SqlCommand cmd2 = new SqlCommand("SELECT SKUName FROM COM_SKU WHERE SKUStockCode = " + stockCode, con);
             SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
             adapter2.Fill(containsAllRelatedProductData); //Error
             stockCode = "";
         }
    }

DataTable に新しい列を作成する際にいくつかの名前付け制限がない限り (私が知っていることはありません)、エラーが無効な列名になる理由がわかりません。ここでも、この空の DataTable (containsAllRelatedProductData と呼ばれる) を FILL するとエラーが発生し、そこから何も抽出されません。無効な列名エラーが発生する理由を知っている人はいますか?

4

2 に答える 2

3

コマンドは次のようになります。

SELECT SKUName FROM COM_SKU WHERE SKUStockCode = CODE0001

しかし、次のようにする必要があります。

SELECT SKUName FROM COM_SKU WHERE SKUStockCode = 'CODE0001'

'したがって、入力文字列を以下のようにカプセル化する必要があります

foreach(char ch in containsRelatedProductsStringOnly.Rows[0]["SKURelatedProducts"].ToString()) 
{
     if(ch != ' ')
     {
         stockCode = stockCode + ch;
     }
     else
     {
         SqlCommand cmd2 = new SqlCommand("SELECT SKUName FROM COM_SKU WHERE SKUStockCode = '" + stockCode+"'", con);
         SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
         adapter2.Fill(containsAllRelatedProductData); //Error
         stockCode = "";
     }
}
于 2013-07-30T16:17:59.647 に答える
1

以下を試してください:

new SqlCommand("SELECT SKUName FROM COM_SKU WHERE SKUStockCode = '" + stockCode + "'", con);
于 2013-07-30T16:20:47.790 に答える