错误的C#试图从数据库
获取多个数据,当我有这样的代码在C#:错误的C#试图从数据库
private void sqlConnLabel()
{
NoIDPenghuni = new SqlParameter();
SqlConnection con = new SqlConnection(strCon);
com2 = new SqlCommand();
com2.Connection = con;
con.Open();
com2.CommandType = CommandType.StoredProcedure;
com2.CommandText = "label";
NoIDPenghuni.SqlDbType = SqlDbType.VarChar;
NoIDPenghuni.Size = 50;
NoIDPenghuni.ParameterName = "@NoIDPenghuni";
NoIDPenghuni.Value = NoIDPenghuniC;
NoIDPenghuni.Direction = ParameterDirection.Input;
com2.Parameters.Add(NoIDPenghuni);
string NamaPenghuni;
string JKPenghuni;
string NoTelpPenghuni;
string AlamatPenghuni;
string NoKamar;
NamaPenghuni = Convert.ToString(com2.ExecuteScalar());
JKPenghuni = Convert.ToString(com2.ExecuteScalar());
NoTelpPenghuni = Convert.ToString(com2.ExecuteScalar());
AlamatPenghuni = Convert.ToString(com2.ExecuteScalar());
NoKamar = Convert.ToString(com2.ExecuteScalar());
SqlDataReader reader = com2.ExecuteReader();
while (reader.Read())
{
NamaPenghuni = reader["NamaPenghuni"] == DBNull.Value ? null : (string)reader["NamaPenghuni"];
JKPenghuni = reader["JKPenghuni"] == DBNull.Value ? null : (string)reader["JKPenghuni"];
NoTelpPenghuni = reader["NoTelpPenghuni"] == DBNull.Value ? null : (string)reader["NoTelpPenghuni"];
AlamatPenghuni = reader["AlamatPenghuni"] == DBNull.Value ? null : (string)reader["AlamatPenghuni"];
NoKamar = reader["NoKamar"] == DBNull.Value ? null : (string)reader["NoKamar"];
}
label9.Text = NoIDPenghuniC;
label8.Text = NamaPenghuni;
if (JKPenghuni == "P")
label7.Text = "Male";
else
label7.Text = "Female";
label6.Text = NoTelpPenghuni;
label18.Text = AlamatPenghuni;
label5.Text = NoKamar;
con.Close();
}
当我尝试运行它不断告诉我
IndexOutOfRangeException了未处理。
我认为数据不会被提取到我的C#中。只需要在'NamaPenghuni'
例如:如果我取数据与NoIDPenghuni ='110801101,所述NamaPenghuni应普里斯卡Hapsari,所述JKPenghuni应W¯¯,所述NoTelpPenghuni应,并且AlamatPenghuni应该是Jl。 Mega Cinere No. 29,Cinere。
但在我的本地部分,我可以看到所有这些字符串变量的值是Priska Hapsari。
我做错了什么?
您在ExecuteReader之前调用5次ExecuteScalar。
ExecuteScalar返回第一行的第一列(只有一个结果)。
调用5个结果为所有5个变量
的IndexOutOfRange例外,可以通过以下的ExecuteReader是希望能够找到在返回值5列造成的,但我们不能看到,如果StoredProcedure的相同值每行有效返回5个值
,因为我想要将所有数据提取到字符串。我应该为每个变量创建一个不同的函数吗? – 2013-05-14 15:30:20
请解释。存储过程返回多少行?只有一个五列?如果你能显示SP的代码,我们可以更好地理解这个问题。 ExecuteScalar不能用于检索第二列的值,正确的方法是ExecuteReader,但是您需要返回读者所期望的确切列[“your_col_name_here”] – Steve 2013-05-14 15:59:51
感谢问题解决。我最终使用每个数据的执行标量。 – 2013-05-16 08:06:08
您还可以粘贴sp代码吗?也许读者在最终的ExecuteReader上没有任何可读的内容。 – mtsiakiris 2013-05-14 15:18:07
为什么你要在ExecuteReader之前调用5次ExecuteScalar? – Steve 2013-05-14 15:18:09
@Steve,因为我希望所有的数据都可以获取到字符串。 我应该为每个变量创建一个不同的函数吗? – 2013-05-14 15:25:33