2016-12-07 12 views
0

EDIT: я не могу отформатировать мой код ниже, если кто-нибудь его исправит.sql запрос для отображения данных из цены между двумя столбцами C#

Я новичок в sql-запросах и до сих пор учился.

Наименование таблицы: КомиссияПодробнее.

Я хочу, чтобы отобразить @Paisa если gross_amount находится в диапазоне между @FromRate и @ToRate

enter image description here

Ниже мой код:

string paisa; 
     private void load_commission_setup() 
     { 
      SqlCeConnection conn = null; 
      SqlCeCommand cmd = null; 
      SqlCeDataReader rdr = null; 

     try 
     { 
      conn = 
       new SqlCeConnection(
        @"Data Source=|DataDirectory|\Database.sdf;Persist Security Info=False"); 
      conn.Open(); 

      int rowindex = purchaseBillTableDataGridView.Rows.Count - 1; 
      gross_amount = double.Parse(purchaseBillTableDataGridView[10, rowindex].Value.ToString()); 

      // Gross Amount is between the ranges of FromRate and ToRate. 


      cmd = new SqlCeCommand("SELECT Paisa FROM CommissionSetupTable WHERE='" + gross_amount.ToString() + "' BETWEEN @FromRate AND @ToRate;", conn); 
      rdr = cmd.ExecuteReader(); 

      if (rdr == null) 
      { 
      } 
      else 
      { 
       while (rdr.Read()) 
       { 
        paisa = rdr["Paisa"].ToString(); 

       } 
       rdr.Close(); 
       cmd.Dispose(); 
      } 
     } 
     finally 
     { 
      conn.Close(); 
      int rowindex = purchaseBillTableDataGridView.Rows.Count - 1; 
      purchaseBillTableDataGridView[11, rowindex].Value = paisa; 
     } 
    } 
+0

Надеемся, что вы забыли указать значения для заполнителей. Значения @FromRate AND @ ToRate' –

+0

будут взяты из столбцов FromRate и ToRate в CommissionSetupTable. – Patrick

+0

, тогда этот вопрос не является (минимальный полный примерный пример) [http://stackoverflow.com/help/mcve]. Подтвердите отправку соответствующей структуры таблицы. – e4c5

ответ

1

Правильный синтаксис для использования здесь следующие

cmd = new SqlCeCommand(@"SELECT Paisa FROM CommissionSetupTable 
     WHERE @gross BETWEEN FromRate AND ToRate;", conn); 

Обратите внимание, что два фила d имена не должны иметь префикс @, иначе они будут считаться параметрами заполнителей.

И теперь, перед выполнением команды, добавьте параметр для @gross заполнителем

cmd.Parameters.Add("@gross", SqlDbType.Decimal).Value = gross_amount; 

Я не знаю, что это точный тип данных столбцов FromRate и EndRate, но обратите внимание, что вы должны используйте правильный тип данных для своего параметра. Не пропускайте строку и ожидайте, что движок базы данных сделает для вас преобразование. (или, что хуже, объединить вашу ценность с остальной частью sql, используя ToString()). Это всегда неправильно, если когда-нибудь механизм базы данных мог понять ваши ценности.

EDIT
Кроме того, следующие ваши комментарии ниже, кажется, что эта линия является неправильным

int rowindex = purchaseBillTableDataGridView.Rows.Count - 1; 

Если DataGridView имеет свойство AllowUserToAddRow значение ИСТИНА, то вы хотите использовать

int rowindex = purchaseBillTableDataGridView.Rows.Count - 2; 

потому что первая строка указывает на пустую строку, добавленную в DataGridView для вставки новой записи.

+0

'Ссылка на объект не установлена ​​в экземпляр объекта. ' получение этой ошибки. Я получаю общую сумму отсюда 'int rowindex = purchaseBillTableDataGridView.Rows.Count - 1; gross_amount = double.Parse (покупкаBillTableDataGridView [10, rowindex] .Value.ToString()); ' – Patrick

+0

ошибка в этом' cmd.Parameters.Add ("@ gross", DbType.Decimal).Значение = gross_amount; ' – Patrick

+0

Это SqlDbType, но на какой строке вы получили исключение? – Steve