使用ExecuteReader循环遍历行

tec*_*ora 1 c# sqldatareader

我很难过,我试图从数据库中填充5个文本框,而不是所有5个文本框都会有数据.

例:

ID | ItemID | QTYPE

1 | 10 | 2盒

2 | 10 | 6盒

3 | 11 | 1个案例

在这个例子中,它将填充QuantityType1TxtBox 2 Boxes和QuantityType2TxtBox 6 Boxes,而其他三个文本框留空.

我尝试运行此代码时得到的以下错误是:索引超出了数组的范围.

此行发生此错误:QuantityType2TxtBox.Text = rdr.GetString(1);

SqlCommand cmd = new SqlCommand(@"SELECT QType FROM InventoryQType
                                                WHERE ItemID = '" + itemID + "'", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    QuantityType1TxtBox.Text = rdr.GetString(0);
    QuantityType2TxtBox.Text = rdr.GetString(1);
    QuantityType3TxtBox.Text = rdr.GetString(2);
    QuantityType4TxtBox.Text = rdr.GetString(3);
    QuantityType5TxtBox.Text = rdr.GetString(4);
}
rdr.Close();
Run Code Online (Sandbox Code Playgroud)

JCl*_*ill 7

我不确定我的switch语句是否正确,但我认为这段代码的其余部分对于显示参数和使用语句很有用.

string sql = @"SELECT QType FROM InventoryQType WHERE ItemID=@id";
using (SqlConnection conn = new SqlConnection("[put your connection string here, or reference to web.config]")) {
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(sql, conn)) {
        cmd.Parameters.Add("@id", System.Data.SqlDbType.VarChar).Value = itemID;
        SqlDataReader rdr = cmd.ExecuteReader();
        int loop = 1;
        while (rdr.Read()) {
            switch(loop){
                case 1:
                    QuantityType1TxtBox.Text = (string)rdr["QType"];
                    break;
                case 2:
                    QuantityType2TxtBox.Text = (string)rdr["QType"];
                    break;
                case 3:
                    QuantityType3TxtBox.Text = (string)rdr["QType"];
                    break;
                case 4:
                    QuantityType4TxtBox.Text = (string)rdr["QType"];
                    break;
                case 5:
                    QuantityType5TxtBox.Text = (string)rdr["QType"];
                    break;
                default:
                    break;
            }
            loop++;
        }
    }
    conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,您的itemID在您的示例中似乎是一个varchar.我假设它实际上是一个int,所以如果这是真的,你需要将参数的'VarChar'部分改为'Int'.