-1

私を助けてください、私は別のクラス "DbConnection"私のコードで接続文字列全体を書きました:

public void binddropdownlist() {

        DataTable dt = new DataTable();

         DbConnection b = new DbConnection();     

        try
        {

            b.OpenConnection();


            string SqlStatement = "Select Col1 + Col2  from tablename";

           SqlCommand SqlCmd = new SqlCommand(SqlStatement, b);
            SqlDataAdapter da = new SqlDataAdapter ();
            da.Fill(dt);

            if(dt.Rows.Count>0)
            {
                Locdrplist.DataSource = dt;
                Locdrplist.DataTextField = "Col1";
                Locdrplist.DataValueField = "Col2";
                Locdrplist.DataBind();
            }

        }

        catch(System.Data.SqlClient.SqlException ex)
        {
            string msg = "FetchError";

            throw new Exception("error");
        }

        finally
        {
           b.CloseConnection();
        }    
      }

文字列値を渡すとエラーが発生しますが、クラス インスタンスを文字列として作成する方法がわかりません。助けてください

4

2 に答える 2

4

DB接続を確認してください

DbConnection b = new DbConnection();

これは SqlConnection のタイプではありません。

SqlCommand のコンストラクターのシグネチャは次のとおりです。

public SqlCommand(string query, SqlConnection conn);
于 2013-07-26T12:46:15.230 に答える
1

教えることの精神で、私はこれをそこに投げたかっただけです。これらの ADO.NET オブジェクトを使用する場合、これらが適切に破棄されるようにするための推奨される方法を次に示します。

using (SqlConnection c = new SqlConnection(connString))
{
    c.Open();

    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Person WHERE PersonID = @PersonID", c))
    {
        cmd.Parameters.AddWithValue("@PersonID", personId);

        using (SqlDataReader r = cmd.ExecuteReader())
        {
            while (r.Read())
            {
            }
        }
    }
}

明らかに、コードはニーズに適合する必要がありますが、全体的な例を挙げようとしています。このステートメントにより、がすべてのオブジェクトでusing確実に呼び出されます。Disposeこれは非常に重要です。コマンドがパラメーター化されていることに注意してください。これは、SQL インジェクションにさらされないため、非常に重要です。最後に、データを読み取るときは、 を使用しSqlDataReaderて非常に高速かつ効率的にメモリを使用できます。

を使用する必要はありSqlDataReaderません。次のようなことができます。

using (SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Person WHERE PersonID = @PersonID", c))
{
    sda.SelectCommand.Parameters.AddWithValue("@PersonID", personId);

    var dt = new DataTable();
    sda.Fill(dt);
}
于 2013-07-26T12:49:50.807 に答える