C# 为tableName创建参数会导致异常
您好,我正在尝试创建一个从数据库读取数据的通用方法。以下是我迄今为止所做的:C# 为tableName创建参数会导致异常,c#,ado.net,C#,Ado.net,您好,我正在尝试创建一个从数据库读取数据的通用方法。以下是我迄今为止所做的: private static void GetData(string tableName, string key, string values) { string connectionString = "data source=DB03RO;initial catalog=NCOI_Dev;User ID=NCOI_Olympus;Password=Olympus;persist securit
private static void GetData(string tableName, string key, string values)
{
string connectionString = "data source=DB03RO;initial catalog=NCOI_Dev;User ID=NCOI_Olympus;Password=Olympus;persist security info=False;packet size=4096;Enlist=true;Transaction Binding=Explicit Unbind;";
string commandText = @"SELECT @key , @value FROM @Name";
SqlDataReader reader = null;
using (var connection = new SqlConnection(connectionString))
using (var cmd = new SqlCommand())
{
connection.Open();
cmd.Connection = connection;
cmd.Parameters.Add(new SqlParameter("@Name", tableName));
cmd.Parameters.Add(new SqlParameter("@key", key));
cmd.Parameters.Add(new SqlParameter("@value", values));
cmd.CommandType = CommandType.Text;
cmd.CommandText = commandText;
reader = cmd.ExecuteReader();
while (reader != null)
{
string id = (string)reader[key];
string data = (string)reader[values];
Console.WriteLine(id + " " + data);
}
}
}
当我试图执行读卡器时,我似乎遇到了一个错误:
必须声明表变量@Name
如何更正此问题?否,不能参数化表名。 您只需要使用string.FormatSELECT@key,[{0}]中的@value],tableName 尽管如此,它还是容易受到sql注入的攻击。
但我猜你不是从用户输入中得到表名的,你团队中的开发人员也不像偶尔会输入“假”的人;删除所有内容!!!' 否,不能参数化表名。 您只需要使用string.FormatSELECT@key,[{0}]中的@value],tableName 尽管如此,它还是容易受到sql注入的攻击。 但我猜你不是从用户输入中得到表名的,你团队中的开发人员也不像偶尔会输入“假”的人;删除所有内容!!!' 我不是SQL方面的专家,但据我所知,您不能在查询中参数化表名。你应该使用其他的机制 使用简单的string.Format{0},强制控制传递的参数的有效性我不擅长SQL,但据我所知,您不能在查询中参数化表名。你应该使用其他的机制
使用简单的string.Format{0},强制控制传递的参数的有效性不能用参数化查询替换数据库对象表、列、视图等名称。您只能通过连接来完成
string commandText = String.Format("SELECT {0}, {1} FROM {2}", key, value, tableName);
不能用参数化查询替换数据库对象表、列、视图等名称。您只能通过连接来完成
string commandText = String.Format("SELECT {0}, {1} FROM {2}", key, value, tableName);
对象名称在TSQL中必须是静态的 您必须使用string.Format或类似的东西来实现您的目标
类似的问题:对象名称在TSQL中必须是静态的 您必须使用string.Format或类似的东西来实现您的目标
类似的问题:除了下面的答案之外,依赖DataAdapter或SqlDataAdapter来填充表格可能会有帮助除了下面的答案之外,依赖DataAdapter或SqlDataAdapter来填充表格可能会有帮助