2016-11-28 12 views
-1

コードを実行するときに問題が発生しました。それは私が間違いが何であるかを知らない条件式のデータ型の不一致がC#

OleDbDataReader reader = command.ExecuteReader(); 

に条件式

データ型の不一致を言います。誰でも助けてくれますか?

private void JumlahLembar() 
{ 
    foreach (DataGridViewRow row in JadwalisiGV.Rows) 
    { 
     int lim30den50tot; 

     if (!row.IsNewRow) 
     { 
      OleDbConnection kon = new OleDbConnection(koneksi); 
      OleDbCommand command = kon.CreateCommand(); 

      kon.Open(); 
      command.CommandText = "select * from [StokLembar$] where [Limit] = '" + row.Cells["Limit"].Value + "'"; 
      OleDbDataReader reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       int den50 = int.Parse(reader["Lembar Denom 50"].ToString()); 
       int den100 = int.Parse(reader["Lembar Denom 100"].ToString()); 

       if (row.Cells["Limit"].Value.ToString() == "30") 
       { 
        lim30++; 
        lim30den50tot = lim30 * lim30 * 2 * 1000000 * den50 * 50000; 
        TotalDen50Box.Text = lim30den50tot.ToString(); 

       } 
      } 

      kon.Close(); 
     } 
    } 
} 
+0

[StokLembar $]から[command.CommandText = "select *]を選択します。[Limit] = '" + row.Cells ["Limit"]。値+ "'"; '、データ型とはデータベースの[制限]の? row.Cells ["Limit"]。値は 'object'を返します。 – DoomerDGR8

+0

の[Limit]のデータ型に応じて、 'int'または' string'にキャストする必要があります。[Limit]のデータ型はGeneralです。 [Limit]のデータは実際には整数です。ところで、私のデータベースにExcelを使用しているのですが、 –

+0

に数字が含まれている場合は、数値として列データ型を変更したり、その列にテキストコンテンツが含まれていると、あなたのコードが正しい場合は、列のデータ型のテキスト。 – Damith

答えて

0

Limitをテキスト列に設定すると、ほとんどの場合数値になる可能性があります。引用符なしで以下を試してください

command.CommandText = "select * from [StokLembar$] where [Limit] = " + row.Cells["Limit"].Value` 

SQL文を連結するのではなく、SQLインジェクション攻撃を避けるために、パラメータを使用することをお勧めします。

+0

ああ、本当にありがとう。できます ! :) –

1

としてusingの下で実行されているパラメータベースのクエリのために行く:

using (OleDbCommand command = conn.CreateCommand()) 
    { 
     // create command with placeholders 
     cmd.CommandText = 
      "SELECT * FROM [StokLembar$] WHERE [Limit] = @limit "; 

     // add named parameters 
     command.Parameters.AddRange(new OleDbParameter[] 
     { 
      new OleDbParameter("@limit", row.Cells["Limit"].Value) 
     }); 

     // execute 
     command.ExecuteNonQuery(); 
    } 

私は、[リミット]、データベース内の文字列型であると仮定しています。あなたのマイレージは異なる場合があります。 @Patrick-Hofmanによって指摘されているように、データベースは現在独自に把握できます。

+1

'.ToString()'を削除し、データベースに正しい型を見つけさせる。 –

関連する問題