Parameter.addwithvalue函数错误

时间:2014-07-01 12:50:21

标签: c# sql string object ado.net

    public static bool dataMatch(string data, string tableName, string column)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = new SqlConnection(CnnStr);//connection string has been applied to CnnStr


        cmd.CommandText = "SELECT * FROM [@tableName] WHERE [@column]=[@data]";
        cmd.Parameters.Add("@tableName",tableName);
        cmd.Parameters.AddWithValue("@column", (column as Object).ToString());
        cmd.Parameters.AddWithValue("@data", (data as Object).ToString());

        cmd.Connection.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            dr.Close();
            cmd.Connection.Close();
            return true;
        }
        dr.Close();
        cmd.Connection.Close();
        return false;
    }

您好

我得到的错误是:

  

用户代码无效对象名@tableName

未处理SqlException

我认为问题是AddWithValue函数的第二个参数的args是字符串,并且它们必须是对象类型,所以我试图将addwithvalue函数的第二个字符串参数转换为Object或object但是得到相同的错误

2 个答案:

答案 0 :(得分:4)

您无法对列名或表名进行参数化。

您只需参数化。这就是为什么您不能使用@tableName@column作为参数的原因。您可以修复它们,指定表名和列名作为SQL的一部分。

您的代码是C#的有效语法,但它不是有效的SQL。

这是一个糟糕的解决方案,但如果确实想要使用它们,请查看dynamic SQL.

同时使用using statement来处理您的SqlConnectionSqlCommandSqlDataReader

using(SqlConnection con = new SqlConnection(CnnStr))
using(SqlCommand cmd = con.CreateCommand())
{
    cmd.CommandText = "SELECT * FROM " + tableName + " WHERE " + column.ToString() + "=@data";
    cmd.Parameters.Add("@data", data.ToString());
    using(SqlDataReader dr = cmd.ExecuteReader())
    {
        //
    }
}

答案 1 :(得分:-1)

您可以通过以下方法实现此目的。

 public static bool dataMatch(string data, string tableName, string column)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = new SqlConnection(CnnStr);//connection string has been applied to CnnStr


        cmd.CommandText = "SELECT * FROM '"+tableName+"' WHERE [@column]=[@data]";

        cmd.Parameters.AddWithValue("@column", (column as Object).ToString());
        cmd.Parameters.AddWithValue("@data", (data as Object).ToString());

        cmd.Connection.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            dr.Close();
            cmd.Connection.Close();
            return true;
        }
        dr.Close();
        cmd.Connection.Close();
        return false;
    }

在查询中连接表名而不是作为参数传递。