私は、ストアドプロシージャとC#を使用してデータベースからドロップダウンリストにデータをバインドする正しい方法を知りたいと思います。私はempFname
の列を持つEmployee
テーブルと、empFname
の列を持つEmployee
テーブルの値に一致する@fname
のパラメータを持つストアドプロシージャselectEmployeePaycheck
を持つドロップダウンリストddlEmployees
を持っています。一番下のコードを使ってデータベースからデータをバインドしていますが、残念ながらそれは機能しません。C#とストアドプロシージャを使用したデータベースからのドロップダウンリストのバインド
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter adr;
DataTable dt;
string conStr;
conStr = ConfigurationManager.ConnectionStrings["payRollConnection"].ConnectionString;
con = new SqlConnection(conStr);
con.Open();
cmd = new SqlCommand("selectEmployeePayCheck", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedValue);
adr = new SqlAdapter(cmd);
dt = new DataTable();
adr.Fill(dt);
cmd.ExecuteReader();
ddlEmployees.DataTextField = "empFname";
ddlEmployees.DataValueField = "empFname";
ddlEmployees.DataSource = dt;
ddlEmployees.DataBind();
cmd.Dispose();
con.Close();
提案、修正、回答は非常によく受け入れられています。
ここ
あなたはそれが起こっていない何が起こっていることは動作しないと言うときは?また、一意名のような名前を使用するときは注意してください。 2人のJohnsがあなたのために働いていれば、間違ったデータが返されます。最も良い方法は通常、あなたのデータベースにユニークなid列を持ち、それをクエリや結合などに使用することです。 – ThatChris
問題はここにあると思います。 'cmd.Parameters.AddWithValue(" @ fname "、ddlEmployees.SelectedValue);' 'ddlEmployees'にデータをバインドする前にFNameを一意の値として渡していますか? –
@ChristopherTrevorが有効なポイントを作成しました。私が感じ取ることができるもう一つの問題はウェブデザインです。 empFNameをddlEmployeesからストアド・プロシージャに渡し、同じ結果を同じddlEmployeesにバインドしようとしています。ストアドプロシージャの結果が1つだけの場合は、ラベルまたは異なるコントロールを使用します。複数の結果が予想される場合は、別のddlを使用してバインドしてください。 –