我有一點問題,但我不明白這個問題。所以我有一個DataReader
我從我的數據庫中讀取我的數據。但問題是,儘管我的數據庫中有匹配的行,DataReader
不斷回來,沒有行。datareader不讀取數據
我的數據庫連接:
static private String _connectionString = @"Data Source=(localdb)\v11.0;Initial Catalog=dboVids;User id=g;password=g;Connect Timeout=15;Encrypt=False";
static private SqlConnection _connection;
static Connection()
{
try
{
_connection = new SqlConnection(_connectionString);
Open();
}
catch (Exception ex)
{
switch (ex.HResult)
{
default:
throw;
}
}
}
我的方法:
static public SqlDataReader WeergevenRolPerUser(string userName)
{
try
{
Open();
SqlCommand command = new SqlCommand("select * from [dbo].[fnShowDatabaseRole]('@UserName')", _connection);
command.Parameters.AddWithValue("@UserName", userName);
SqlDataReader myReader = command.ExecuteReader();
myReader.Read();
return myReader;
}
catch (Exception ex)
{
switch (ex.HResult)
{
default:
throw;
}
}
}
的Open()
方法:
private static void Open()
{
try
{
if (_connection.State != ConnectionState.Open)
_connection.Open();
}
catch (Exception ex)
{
switch (ex.HResult)
{
default:
throw;
}
}
}
這裏就是我所說的DataReader
:
private void lstUsers_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataReader reader = null;
try
{
if (_username != "" && lstUsers.SelectedValue != null)
{
string user = lstUsers.SelectedValue.ToString();
reader = Database.Users.WeergevenRolPerUser(user);
if (reader.Read())
{
MessageBox.Show("unreachable");
var rol = reader.GetString(0);
if (rol == "gebruiker")
{
rdbUser.Checked = true;
}
}
}
}
catch (Exception ex)
{
switch (ex.HResult)
{
default:
throw;
}
}
finally
{
if (reader != null) reader.Close();
}
}
沒有足夠的信息。通常情況下,你可以使用Profiler來查看你的sql命令是否擊中了數據庫,所以你完全知道*真正的查詢是什麼(而不是你認爲它是什麼),然後你拿它並在你的數據庫上執行它,看看你*實際*退後。這通常足以告訴你90%的時間發生了什麼 – Will
查詢在數據庫中執行時是否返回結果?你能調試應用程序,而不會拋出任何異常嗎?你也應該使用_using_-Blocks。目前您並未關閉連接。 – Greg
有一個共享的'Connection'對象 - 共享連接*字符串*,但是爲每個需要一個'Command的命令'創建新的'Connection'對象通常是一個糟糕的主意(並且確保你將它們封裝在'using'中或者使用後處理它們)。 –