我有以下功能:
private void populate()
{
String connectionString = Properties.Settings.Default.Database;
String selectString = "select artikelnummer, omschrijving from Artikels";
SqlDataReader reader = null;
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(selectString);
reader = command.ExecuteReader();
connection.Open();
int x = 0;
while (reader.Read())
{
String item = String.Empty;
item = Convert.ToString(reader["Artikelnummer"]) + "\t" + Convert.ToString(reader["Omschrijving"]);
x++;
listboxGeselecteerd.Items.Add(item);
}
}
跳过reader = command.ExecuteReader();
之后的所有内容。
我做错了什么?
更新:将connection.Open();
移至正确的位置。现在,当我到达该行时,我的输出显示Step into: Stepping over non-user code 'System.Data.SqlClient.SqlConnection.Open
然后跳过剩下的功能。
答案 0 :(得分:1)
我很惊讶它没有抛出异常,但你需要在执行阅读器之前打开连接。
答案 1 :(得分:1)
我的钱是在调用堆栈中吃掉异常的一个方法,因为这应该抛出一个因为没有打开连接。那是你最大的问题。
您遇到的下一个问题是您的连接与SqlCommand没有关联,因此即使打开它也没关系。
最后,connection.Open();
需要在ExecuteReader之前。
除此之外,你真的应该使用using
块。
{
String connectionString = Properties.Settings.Default.Database;
String selectString = "select artikelnummer, omschrijving from Artikels";
SqlDataReader reader = null;
using (SqlConnection connection = new SqlConnection(connectionString))
/* you also need to associate the connection with the command */
using (SqlCommand command = new SqlCommand(selectString, connection))
{
connection.Open();
reader = command.ExecuteReader();
int x = 0;
while (reader.Read())
{
String item = String.Empty;
item = Convert.ToString(reader["Artikelnummer"]) + "\t" + Convert.ToString(reader["Omschrijving"]);
x++;
listboxGeselecteerd.Items.Add(item);
}
}
}
如何进行简单的“printf”式调试并发布您获得的异常?
try
{
connection.Open();
...
}
//catch (Exception e)
catch (SqlException e)
{
// at least one of these..
Console.WriteLine(e);
MessageBox.Show(e);
Debug.WriteLine(e);
var inner = e.InnerException;
while (inner != null)
{
//display / log / view
inner = inner.InnerException;
}
}
鉴于注释中的异常文本(A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
)看起来更像是在真实消息出现之前得到的消息,我会捕获一个SqlException并检查InnerException(s)。
答案 2 :(得分:0)
您必须在尝试使用之前打开连接。在您的command.ExecuteReader()调用上方移动connection.Open()。
答案 3 :(得分:0)
您需要在调用ExecuteReader之前打开连接。
此外,您不会将连接分配给SqlCommand。你需要这样做:
using(qlConnection connection = new SqlConnection(connectionString))
{
using(SqlCommand command = new SqlCommand(selectString,connection))
{
connection.Open();
reader = command.ExecuteReader();
// rest of your code.
}
}
答案 4 :(得分:0)
我只能猜测你需要在执行阅读器之前打开你的连接,并且因为正在抛出异常而正在跳过它。
答案 5 :(得分:0)
private void populate(){
String connectionString = Properties.Settings.Default.Database;
String commandString = "SELECT artikelnummer, omschrijving FROM Artikels";
using (SqlConnection cn = new SqlConnection(connectionString)){
using (SqlCommand cm = new SqlCommand(commandString, cn)){
cn.Open();
SqlDataReader dr = cm.ExecuteReader();
int x = 0;
while (dr.Read()){
String item = String.Empty;
item = Convert.ToString(dr["Artikelnummer"]) + "\t" + Convert.ToString(dr["Omschrijving"]);
x++;
listboxGeselecteerd.Items.Add(item);
}
}
}
}
另一方面,你对'int x'做了什么?我看到你正在增加它,但没有做任何事情。