2016-11-28 1 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 = "*를 선택하십시오. [Limit] ='"+ row.Cells [ "Limit"]. 값 + " '";', 데이터 유형은 무엇입니까? 데이터베이스에서 [제한]? 값은 "객체"를 반환 할 것입니다. – DoomerDGR8

+0

[Limit]의 데이터 유형은 일반입니다. [Limit]의 데이터 유형에 따라 'int'또는 'string'에 캐스팅해야 할 수도 있습니다. [Limit]의 데이터는 실제로 정수입니다. 그런데 Excel을 사용하여 데이터베이스에 –

+0

숫자가 포함 된 경우 숫자로 열 데이터 형식을 변경하거나 해당 열에 텍스트 콘텐츠가 있으면 Excel 데이터 형식을 텍스트로 변경하는 것이 좋습니다. 열 데이터 형식 텍스트가 올바른 경우 – Damith

답변

0

Limit을 텍스트 열로 설정하면 대부분 숫자 일 수 있습니다. 따옴표없이 아래에서 시도하십시오

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

SQL 문을 연결하는 대신 SQL 주입 공격을 피하는 것이 더 좋습니다. 같은 using에서 실행 매개 변수를 기반으로 쿼리에 대한

+0

아 감사합니다. 그것은 작동합니다! :) –

1

이동 : 나는 믿고있어

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()'을 제거하고 데이터베이스가 올바른 유형을 찾도록하십시오. –

관련 문제