2016-11-02 16 views
0

は、MSSQLでこのクエリを書いた:C#でクエリが正しく実行されないのはなぜですか?

SELECT Code, Description,LEAD(Code, 1) OVER (ORDER BY code) AS next_code FROM Liguanea_Lane WHERE code LIKE '%88%' 

を、それはコンボボックス名からの入力を受け付けているだけで、この時間は「検索」ボタンのクリック時に実行される私のC#コードで同じクエリをバック書きました。これは、それは以下の通りです:

private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      string connectionString = "Data Source=JAVY26;Initial Catalog=Pharmacies;Integrated Security=True"; 
      SqlConnection con = new SqlConnection(connectionString); 
      con.Open(); 
      string query = "SELECT Code, Description,LEAD(Code, 1) OVER (ORDER BY code) AS next_code FROM Liguanea_Lane WHERE code LIKE '%" + search.Text+"%'; "; 
      SqlCommand cmd = new SqlCommand(query, con); 

      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       string scode = dr.GetString(dr.GetOrdinal("next_code")); 
       textBox2.Text = scode; 
      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.ToString()); 
     } 
    } 

私の問題は、私はなっておくことである:「。データがNULLであるこのメソッドまたはプロパティがNULL値で呼び出すことはできません」コード内のクエリが間違っていますか?それは私のSQL Serverで正常に動作します。 、これはこれでユーザーの介入なしにループである

while (dr.Read()) 
{ 
    string scode = dr.GetString(dr.GetOrdinal("next_code")); 
    textBox2.Text = scode; 
} 

クエリが3行を返すとします:

+2

最初に、パラメータ化されたクエリについて読んでください。第2に、 'Code'は返り値セットにヌル値を持つことがあります。クエリは正常に実行されますが、 'dr.GetString()'はnull値での操作を拒否しています。 – Rob

+0

間違いなくそれを探します。おかげでロブ。感謝します。 SQL Serverでクエリを実行するとヌル値はありません – Jevon

+0

デバッグを介して 'query'変数の値が元のSQLクエリと正確に一致することを確認しましたか? – DeanOC

答えて

0

私はこの問題は、このためであると仮定しますの最初のパスで

Code Description Next_Code 
------------------------------- 
088 ABC   881 
881 BCD   882 
882 CDE   Null 

をあなたのループは881をtextbox2.Textに割り当てます。 2回目のパスでは、882をtextbox2.Textに割り当てます。 3回目のパスでは、next_codeがnullなのでエラーです。

+0

「next_code」が一時的な列として表示されているため、それが存在しない列として認識しています。 – Jevon

0

私は即興です。私はちょうど私の既存のデータベースにnext_codeフィールドを追加し、先行するものと進歩に基づいて値をコピーします。代わりにデータベース内のすべての作業を行い、コードを変更しました。

private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      string connectionString = "Data Source=JAVY26;Initial Catalog=Pharmacies;Integrated Security=True"; 
      SqlConnection con = new SqlConnection(connectionString); 
      con.Open(); 
      string query = "SELECT Code, Description, Next_Code FROM Liguanea_Lane WHERE code LIKE '%" + search.Text+"%'; "; 
      SqlCommand cmd = new SqlCommand(query, con); 

      SqlDataReader dr = cmd.ExecuteReader(); 

      while (dr.Read()) 
      { 
       string scode = dr.GetString(dr.GetOrdinal("next_code")); 
       textBox2.Text = scode; 

      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.ToString()); 
     } 
    } 

これで、必要な値が返されるようになりました。みんなにフィードバックをいただきありがとうございます。試してアシストするのにかかった時間を感謝します。

関連する問題