[英]datareader doesn't read data
我有一個問題,但我無法解決問題。 因此,我有一個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();
}
}
我的猜測是,您在讀取器對象上兩次調用.Read()
,根據MSDN :
將SqlDataReader前進到下一條記錄。
您可以在WeergevenRolPerUser
執行一次此操作,該操作將讀取您希望返回的數據,而在lstUsers_SelectedIndexChanged
中再次執行該lstUsers_SelectedIndexChanged
,因為您找不到下lstUsers_SelectedIndexChanged
,因此您將不會讀取任何內容。
如果我是您,則將WeergevenRolPerUser
更改為返回User
對象。
static public User WeergevenRolPerUser(string userName)
{
try
{
using(var connection = new SqlConnection(/* connection string */))
{
connection.Open();
using(var command = new SqlCommand("select * from [dbo].[fnShowDatabaseRole]('@UserName')", connection))
{
command.Parameters.AddWithValue("@UserName", userName);
using(var myReader = command.ExecuteReader())
{
while(myReader.Read())
{
return new User
{
Username = myReader.GetString(/* column index */),
Role = myReader.GetString(/* column index */)
}
}
}
myReader.Close();
}
}
catch (SqlException ex)
{
throw;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.