0

我在 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 应该是Priska Hapsari,JKPenghuni 应该是W,NoTelpPenghuni 应该是08567711332,AlamatPenghuni 应该是Jl。Mega Cinere No. 29,Cinere

但在我的本地人部分,我可以看到所有这些字符串变量值都是 Priska Hapsari。

我做错了什么?

4

1 回答 1

0

在 ExecuteReader 之前调用 ExecuteScalar 5 次。
ExecuteScalar 返回第一行的第一列(只有一个结果)。
调用它 5 次会导致所有 5 个变量的值相同

IndexOutOfRange 异常可能是由以下 ExecuteReader 引起的,该 ExecuteReader 期望在返回值中找到 5 列,但我们无法查看 StoredProcedure 是否每行有效返回 5 个值

于 2013-05-14T15:19:50.067 回答