私はC#が初めてで、物事を混乱させようとしています。私は iSeries (RPG) でのコーディングに慣れているので、c# は私にとって非常に異なる概念です。
一致する行に応じてデータの行 (または行) を返すストアド プロシージャがあります。
テーブルusersが次の列を保持しているとします。
UserId, CompanyId, FirstName, LastName, CompanyAdmin, AccountStatus, UserName.
Select * from users where CompanyId = 1
一致する会社 ID (つまり.. )があるこれらの列をすべて返すストアド プロシージャがあります。
public int UserId {get; set;}
上記の一致するフィールドと適切な get/set メソッド (つまり、など)を持つクラスを作成しました。
を使用SqlDataReader
し、クラスの各フィールドにリーダーからのデータをロードしようとしていますが、エラーが発生します
'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();
}
}
}