0

尊敬されるユーザー、

データセットを使用してデータを抽出しています。テキストボックスに値を入れたい。しかし、価値は出てきていません。

私は次のコードを持っています

try
            {
                da = new SqlDataAdapter("select ID from Customer where Name='" + gvBkPendingSearch.SelectedRows[0].Cells[1].Value.ToString() + "'",con);
                DataSet ds = new DataSet();
                da.Fill(ds);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    txtCustomerID.Text = ds.Tables[0].Rows[0].ToString();
            }
            catch (Exception ex)
            {

            }
            finally
            {
            }

txtCustomerIDは私のテキストボックスです。> >>>>System.Data.DataRowとして値をキャプチャしています

エラーが発生していますtxtCustomerID.Text = ds.Tables[0].Rows[0].ToString();

しかし、私はそれを理解することができません。私を助けてください。

4

2 に答える 2

11

このように変更します

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
   txtCustomerID.Text = ds.Tables[0].Rows[i]["ID"].ToString();

あなたがしている間違いは、あなたはこれにアクセスしているということです

ds.Tables[0].Rows[0].ToString();

0行目、全行を意味します!! 列の値ではありません

そして、データテーブルの行はSystem.Data.DataRow.Netにあります

于 2012-12-31T08:22:42.240 に答える
3

列を選択する必要があります。

txtCustomerID.Text = ds.Tables[0].Rows[i][0].ToString();

また、ループの各反復でテキストボックスの値を上書きしていることに注意してください。したがって、最終的には、このテキストボックスの最後のレコードのIDになります。

また、クエリはSQLインジェクションに対して脆弱なようです。個人的には、ORMまたは単純な古いADO.NETを優先して、データセットをスクレイピングすることをお勧めします。

public static IEnumerable<int> GetIds(string name)
{
    using (var conn = new SqlConnection("Your connection string comes here"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "select ID from Customer where Name=@Name";
        cmd.Parameters.AddWithValue("@Name", name);
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                yield return reader.GetInt32(reader.GetOrdinal("ID"));
            }
        }
    }
}

そして今、あなたはこの関数を楽しく使うことができます:

string name = gvBkPendingSearch.SelectedRows[0].Cells[1].Value.ToString();
int id = GetIds(name).FirstOrDefault();
txtCustomerID.Text = id.ToString();
于 2012-12-31T08:20:12.960 に答える