我正在尝试从字符串列表中的sql添加数据,但它仍然说我的字符串列表= null。
按钮上的代码:
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读取并放入字符串列表的代码。我知道我的连接工作正常,因为我可以添加宠物
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 :(得分:2)
如果列表以null
的形式返回,那么您正在点击catch(Exception ex)
块。这是唯一返回null的地方。提示:停止吞咽异常。例外情况会告诉您问题所在。
另外:使用参数 - 永远不要像这样添加输入。
您可能打算使用sId
代替saName
。
我可以谦卑地在这里建议一些“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();
}
}