2017-12-08 12 views
-8

sqlの文字列リストにデータを追加しようとしていますが、文字列リスト= nullとなっています。ボタン上のSQLから読み込むと文字列リストに値が入りません

コード:

protected void Button2_Click(object sender, EventArgs e) 
     { 
      // go back to the menu 
     } 
     protected void Button3_Click(object sender, EventArgs e) 
     { 
      // code to display the books by sanctuary 
      ListBox1.Items.Clear(); 
      List<String> s = DBConnectivity.LoadBooksBySanctuary2(3/*int.Parse(DDSanctuary.SelectedValue)*/); 

      foreach (var detail in s) 
      { 
       ListBox1.Items.Add(detail); 
      } 




     } 

コードは、SQLから読み込み、文字列リストに入れています。私はリストがnullとして戻って来ている場合は、私は、あなたがcatch(Exception ex)ブロックをヒットしている、ペット

public static List<String> LoadPetsBySanctuary2(int sID) 
     { 
      List<String> saName = new List<String>(); 
      SqlConnection myConnection = GetConnection(); 
      // string myQuery = "SELECT Name, categId, cName FROM Book, Category WHERE Book.CategID=Category.ID AND Book.authorId = " + sID; 

      string myQuery = "SELECT Name FROM pet WHERE sanID = " + saName; 

      SqlCommand myCommand = new SqlCommand(myQuery, myConnection); 

      try 
      { 
       myConnection.Open(); 
       SqlDataReader myReader = myCommand.ExecuteReader(); 

       while (myReader.Read()) 
       { 
       // saName.Add(myReader["Name"].ToString()); 

        saName.Add(myReader["Name"].ToString()); 

       } 
       return saName; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception in DBHandler", ex); 
       return null; 
      } 
      finally 
      { 
       myConnection.Close(); 
      } 
     } 
+0

この: 'DBConnectivity.LoadBooksBySanctuary2は(3/* int.Parse(DDSanctuary.SelectedValue)* /);' 'そう一覧を返さない'(そうnullの可能性があります) 'EMERGENCY' ok ... – EpicKip

+0

'がありますが、それは私の文字列リスト= nullであることを覚えています。 **具体的に何を言ったのですか?それを引き起こした原因は何ですか? – mjwills

+3

'sID'パラメータの代わりに' saName'をクエリに渡しています。例外は、クエリが壊れていることを伝えているはずです。 – Filburt

答えて

2

を追加することができますので、私の接続が正常に動作します知っています。それはnullを返す唯一の場所です。ヒント:例外を飲み込むのをやめる。例外により、問題の内容がわかります。

また、のパラメータを使用してください。このような入力は決して追加しないでください。

おそらくsaNameの代わりにsIdを使用することを意味します。

私は謙虚に、ここでいくつかの「Dapperのを」提案してもよい:

public static List<String> LoadPetsBySanctuary2(int sID) 
{ 
    return GetConnection().Query<string>(
     "SELECT Name FROM pet WHERE sanID = @sID", 
     new { sID }).AsList(); 
} 

ノートを:GetConnectionが接続またはないの所有権を通るかどうかは明らかではありません。それがない場合は、usingを使用する必要があります。

public static List<String> LoadPetsBySanctuary2(int sID) 
{ 
    using(var myConnection = GetConnection()) 
    { 
     return myConnection.Query<string>(
      "SELECT Name FROM pet WHERE sanID = @sID", 
      new { sID }).AsList(); 
    } 
} 
+0

ありがとうございました! –

関連する問題