1

このコードは実行されず、データグリッドビューにいくつかのデータを入力するはずですが、取得したデータは取得されたデータの数の行だけでしたが、各セルには値がありませんでした

    public void refDGV()
    {

        con.OpenConnections();
        SqlCommand cmd = new SqlCommand();
        SqlConnection cn = new SqlConnection();
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        cn.ConnectionString = con.connections1;
        cmd.CommandText = "Select  dtransdate, ntotal_pass, nincomeday, ndiesel_exp,  nstartkm, nendkm  from ROUTE2 where ccontrol_no = '" +txtCN.Text + "'";
        da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        ds = new DataSet();
        da.Fill(ds, "Data");
        dgroute.DataSource = ds;
        dgroute.DataMember = "Data";
       dgroute.Columns[0].HeaderText = "Date";
       dgroute.Columns[1].HeaderText = "Total Passenger";
       dgroute.Columns[2].HeaderText = "Income Day";
       dgroute.Columns[3].HeaderText = "Diesel (w/ reciept)";
       dgroute.Columns[4].HeaderText = "Start";
       dgroute.Columns[5].HeaderText = "End";




    }
4

1 に答える 1

3

いつでも DataBase クラスを作成できます。このクラスをリファクタリングして接続文字列を渡すか、.Config ファイルから接続文字列を読み取る必要がある場合は、これをテンプレートとして使用して開始することができます。また、はるかにクリーンです。DataTable を返していることに注意してください。単なる提案が好きな場合は、これを使用できます

public class ClassDataManagement 
{ 
   public DataTable GetData(string sqlcmdString, string connString)
   {
       SqlConnection con = new SqlConnection(connString);
       SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
       SqlDataAdapter da = new SqlDataAdapter(cmd);
       con.Open();
       DataTable dt = new DataTable();
       da.Fill(dt);
       return dt;
   } 
}

DataTable の代わりに DataSet を使用する場合は、DataTable がある場所を置き換えるか、以下のような DataSet を返すようにメソッドを変更します

   public DataSet GetData(string sqlcmdString, string connString)
   {
       SqlConnection con = new SqlConnection(connString);
       SqlCommand cmd = new SqlCommand(sqlcmdString, cn);
       SqlDataAdapter da = new SqlDataAdapter(cmd);
       con.Open();
       DataSet ds = new DataSet();
       da.Fill(ds);
       return ds;
   }   

ds を返した後、このようにバインドする必要があります

   dgroute.DataSource = ds;
   dgroute.DataBind();

あなたのためにも

   dgroute.Rows[0].Column["Heading"] = "Date";
   dgroute.Rows[1].Column["Heading"] = "Total Passenger";
   dgroute.Rows[2].Column["Heading"] = "Income Day";
   dgroute.Rows[3].Column["Heading"] = "Diesel (w/ reciept)";
   dgroute.Rows[4].Column["Heading"] = "Start";
   dgroute.Rows[5].Column["Heading"] = "End";

**Sql Select ステートメントもリファクタリングして、SQL インジェクション用に自分で設定しているパラメーターを許可します。これは単なる建設的な提案です。

于 2012-12-05T04:21:24.393 に答える