2013-05-14 64 views
0

获取多个数据,当我有这样的代码在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。

我做错了什么?

+0

您还可以粘贴sp代码吗?也许读者在最终的ExecuteReader上没有任何可读的内容。 – mtsiakiris 2013-05-14 15:18:07

+0

为什么你要在ExecuteReader之前调用5次ExecuteScalar? – Steve 2013-05-14 15:18:09

+0

@Steve,因为我希望所有的数据都可以获取到字符串。 我应该为每个变量创建一个不同的函数吗? – 2013-05-14 15:25:33

回答

0

您在ExecuteReader之前调用5次ExecuteScalar。
ExecuteScalar返回第一行的第一列(只有一个结果)。
调用5个结果为所有5个变量

的IndexOutOfRange例外,可以通过以下的ExecuteReader是希望能够找到在返回值5列造成的,但我们不能看到,如果StoredProcedure的相同值每行有效返回5个值

+0

,因为我想要将所有数据提取到字符串。我应该为每个变量创建一个不同的函数吗? – 2013-05-14 15:30:20

+0

请解释。存储过程返回多少行?只有一个五列?如果你能显示SP的代码,我们可以更好地理解这个问题。 ExecuteScalar不能用于检索第二列的值,正确的方法是ExecuteReader,但是您需要返回读者所期望的确切列[“your_col_name_here”] – Steve 2013-05-14 15:59:51

+0

感谢问题解决。我最终使用每个数据的执行标量。 – 2013-05-16 08:06:08