我有這個問題正在吃掉我的思想。問題是_reader沒有讀取任何內容。閱讀器不讀數據庫值
我有這樣的代碼:
public DataEntities.Usuario GetUser(string field, string value)
{
using (SqlConnection connection = new SqlConnection(@"connectionstring"))
{
using (SqlCommand query = new SqlCommand())
{
DataEntities.Usuario _usuario = new DataEntities.Usuario();
if (field == "id" || field == "username" || field == "emailaddress")
{
query.Connection = connection;
query.CommandType = CommandType.StoredProcedure;
query.CommandText = "GetUser";
var pField = query.Parameters.AddWithValue("@Field", field);
pField.Direction = ParameterDirection.Input;
var pValue = query.Parameters.AddWithValue("@Value", value);
pValue.Direction = ParameterDirection.Input;
try
{
connection.Open();
SqlDataReader _reader = query.ExecuteReader();
>>> while(_reader.Read())
{
_usuario.EmailAddress = (string)_reader["EmailAddress"];
_usuario.Username = (string)_reader["Username"];
_usuario.FirstName = (_reader["FirstName"] != DBNull.Value) ? (string)_reader["FirstName"] : string.Empty;
_usuario.LastName = (_reader["LastName"] != DBNull.Value) ? (string)_reader["LastName"] : string.Empty;
_usuario.MobileNumber = (_reader["MobileNumber"] != DBNull.Value) ? (string)_reader["MobileNumber"] : string.Empty;
}
_reader.Close();
return _usuario;
}
catch (SqlException ex)
{
Console.WriteLine("SQL Error: " + ex.Message);
}
finally
{
connection.Close();
}
}
return _usuario;
}
}
}
而且我這個存儲過程:
CREATE PROCEDURE [dbo].[GetUser]
@Field nvarchar(100),
@Value nvarchar(100)
AS
SELECT EmailAddress,
Username,
FirstName,
LastName,
MobileNumber,
Register_Date
FROM Users
WHERE @Field = @Value
RETURN 0
,這是不返回任何東西。這不會產生異常,但是當它到達while循環時,它會跳轉並結束它返回創建的對象,其中的所有內容都爲null。
任何線索?我試圖更改存儲過程,但運氣不佳,
你的代碼不會做你認爲會的事。你不能動態地看這樣的列。你沒有得到任何迴應的原因是where where謂詞正在查看這兩個參數的值,而不是實際的列數據。如果你傳入相同的值,你將得到表中的所有行。否則你什麼也得不到。你應該做的是傳遞三個可爲空的參數,並擴展你的where謂詞來處理這三個參數中的任何一個。 –
存儲過程結束時返回0? – haraman
首先,我已經使用了一個函數來列出所有的用戶。 其次,在創建存儲過程時,Visual Studio默認創建「返回0」 –