参数.Addwithvalue函数错误
本文关键字:错误 函数 Addwithvalue 参数 | 更新日期: 2023-09-27 18:11:10
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;
}
你好我得到的错误是:
SqlException被用户代码未处理无效对象名@tableName
我认为问题是AddWithValue函数的第二个参数的参数是字符串,它们必须是对象类型,所以我试图将AddWithValue函数的第二个字符串参数转换为对象或对象,但得到相同的错误
不能参数化列名或表名
你只参数化你的值。这就是为什么不能用@tableName
和@column
作为参数。您可以将表名和列名指定为SQL的一部分来修复它们。
你的代码是一个有效的c#语法,但它不是一个有效的SQL。
这是一个糟糕的解决方案,但如果你真的想要使用它们,看看动态SQL。 也使用using
语句来处理您的SqlConnection
, SqlCommand
和SqlDataReader
。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())
{
//
}
}
您可以通过以下方法实现这一点。
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;
}
在查询中连接表名,而不是作为参数传递。