'System.Data.SqlClient.SqlCommand.SqlCommand(string,System.Data.SqlClient.SqlConnection)'有一些无效的参数

时间:2013-07-26 12:36:45

标签: c# asp.net .net ado.net

请帮帮我,我已经在单独的类“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();
        }    
      }

我收到错误传递字符串值但不知道如何将类实例作为字符串请帮助我

2 个答案:

答案 0 :(得分:4)

检查DBConnection

DbConnection b = new DbConnection();

这不是一种SqlConnection。

SqlCommand构造函数的签名是:

public SqlCommand(string query, SqlConnection conn);

答案 1 :(得分: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);
}