-1

请帮帮我,我已经在单独的“DbConnection”类中编写了整个连接字符串我的代码:

公共无效绑定下拉列表(){

        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

检查 DBConnection

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 回答