0

p_cat コンボ ボックスにデータベースの値を取得する必要がありますが、クエリ内でデータセットを渡すことができません。

class Datatbl_Class1
{
    DataSet ds = new DataSet();

    public DataSet filldata(string q)
    {
        string myconnection = "datasource=localhost;port=3306;username = root; password = 12345V";
        MySqlConnection con = new MySqlConnection(myconnection);
        MySqlCommand cmd = new MySqlCommand(q, con);
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);

        da.Fill(ds);
        return ds;
    }
}

Select_int_Class1 s4 = new Select_int_Class1();
string q = "SELECT Sup_ID FROM gtec_computer.supplier WHERE Sup_Name='" +p_cmb_sup.Text+ "'";

string ww = "Sup_ID";
int t = s4.select_val_int(q, ww);

DataSet n = new DataSet();
Datatbl_Class1 dt = new Datatbl_Class1();

string Query = "SELECT  Cat_ID FROM gtec_computer.supplier_detail WHERE Sup_Id="+t+" ";
n = dt.filldata(Query)

DataSet ds = new DataSet();
string myconnection = "datasource=localhost;port=3306;username = root; password = 12345V";

MySqlConnection con = new MySqlConnection(myconnection);
string q1 = "SELECT  cat_Name FROM gtec_computer.category WHERE Cat_ID= " + n + " ";
MySqlCommand cmd = new MySqlCommand(q1, con);
MySqlDataAdapter da1 = new MySqlDataAdapter(cmd);
da1.Fill(ds);
p_cat.DataSource = ds;
4

1 に答える 1

0

クラス内の関数呼び出しへのパラメーターを介してできるはずです...ただし、コマンド文字列を作成することにより、SQL インジェクションに対して広く開かれます。パラメータ化されたクエリを調べます。ここで、元のコードと代替実装に戻ります...

class Datatbl_Class1
{
    public DataSet filldata(string q )
    {
        string myconnection = "datasource=localhost;port=3306;username = root; password = 12345V";
        MySqlConnection con = new MySqlConnection(myconnection);
        MySqlCommand cmd = new MySqlCommand(q, con);
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);

        DataSet ReturnThisOne = new DataSet();
        da.Fill(ReturnThisOne);
        return ReturnThisOne;
    }
}

クラスのプロパティとして「ds」を作成しないでください。メソッド内でデータセットの新しいインスタンスを作成するだけです。とにかくポインタになります。「n = dt.filldata(Query)」で既に行っているように、それを埋めて呼び出し元へのポインターを返します。はい、関数はデータテーブルを使用しなくなりましたが、参照が返されているため、それを呼び出している「n」の場所はそれを保持します。「n」が入っている関数が解放されるまで、ガベージコレクションに解放されません。

繰り返しますが、パラメーターを調べて、SQL インジェクションを防ぎます。しかし、これでうまくいくはずです。

于 2013-07-02T13:21:15.867 に答える