我对 c# 很陌生,并试图混淆我的方式。我习惯于在 iSeries (RPG) 上编码,所以 c# 对我来说是一个非常不同的概念。
我有一个存储过程,它根据匹配的行返回一行(或多行)数据。
想象一下我的表用户包含以下列:
UserId, CompanyId, FirstName, LastName, CompanyAdmin, AccountStatus, UserName.
我有一个存储过程,它返回所有这些列,其中有匹配的公司 ID(即.. Select * from users where CompanyId = 1
)。
我已经创建了一个具有上述匹配字段和适当的 get/set 方法(即public int UserId {get; set;}
等)的类。
我已经使用了 aSqlDataReader
并且正在尝试使用来自阅读器的数据从我的类中加载每个字段,但是我收到了一个错误
'reader["UserName"]' 抛出类型异常
'System.InvalidOperationException' 对象
{System.InvalidOperationException}
我错过了什么?最终,我想要一个对象,它定义了我的所有字段,这些字段将与我的 SQL Server 存储过程中的结果集相匹配。
我的代码抛出错误看起来像这样..
public partial class Admin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet("ot_Users");
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
using (SqlCommand command = conn.CreateCommand())
{
command.CommandText = "dbo.ot_User_GetByUserName";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@UserName", Environment.UserName);
conn.Open();
SqlDataReader reader = command.ExecuteReader();
ot_Users user = new ot_Users();
while(reader.Read())
{
user.CompanyId = (int) reader["CompanyId"];
user.UserId = (int) reader["UserId"];
user.FirstName = (String) reader["FirstName"];
user.LastName = (String) reader["LastName"];
user.CompanyAdmin = (bool) reader["CompanyAdmin"];
user.AccountStatus = (int) reader["AccountStatus"];
user.UserName = (String) reader["UserName"];
}
reader.NextResult();
CompanyName.Text = user.FirstName.ToString();
}
}
}