C# MySQL查询返回参数列名
我在VS2015中使用C和MySQl查询我的数据库,并返回一个名为method的VARCHAR类型列中的信息。但是,查询返回字符串方法,而不是方法列的值 代码如下:C# MySQL查询返回参数列名,c#,mysql,C#,Mysql,我在VS2015中使用C和MySQl查询我的数据库,并返回一个名为method的VARCHAR类型列中的信息。但是,查询返回字符串方法,而不是方法列的值 代码如下: string queryOne = "SELECT " + "@columnName" + " FROM log.transactions"; MySqlCommand cmdOne = new MySqlCommand(queryOne, connectionString); cm
string queryOne = "SELECT " + "@columnName" + " FROM log.transactions";
MySqlCommand cmdOne = new MySqlCommand(queryOne, connectionString);
cmdOne.Parameters.AddWithValue("@columnName", "method");
MySqlDataReader dataReaderOne = cmdOne.ExecuteReader();
while (dataReaderOne.Read())
{
Console.WriteLine(dataReaderOne.GetString(0));
}
dataReaderOne.Close();
这是输出:
method
method
method
.
.
.
。。方法列中的行数。这是格式问题吗?我的数据库配置是否可能阻止VarChar正确返回?当我将查询更改为查询INT类型的列时,它将返回INT类型列的正确值。您不能在select语句中参数化列名。你所做的很简单,比如说从log.transactions中选择'foo'。它为每行选择一次字符串“foo”。您只需在其中插入一个字符串值;它没有将字符串值解析为SQL 如果您负担得起,您可以做的是从log.transactions中选择*,然后您的C代码可以获取调用者传递给您的任何列中的数据。但是,如果有很多行,您可能会从数据库中拖回很多无用的垃圾 不过,您希望在显示的代码中包含以下内容:
string queryOne = "SELECT method FROM log.transactions";
若你们真的想参数化这个方法,那个就太粗略了,因为SQL注入漏洞
string queryOne = "SELECT " + fieldname + " FROM log.transactions";
这看起来不错,直到某个喜剧演员使用你的应用程序给你一个值0;删除表log.transactions;-在文本框中。那你就有麻烦了。如果您将字符串变量连接到要执行的SQL字符串中,您必须狂热地对其进行清理,即使这样,您也希望以任何方式避免它。这是俄罗斯轮盘赌 如果要保持列的动态性,查询的形式必须类似。现在相应地传递列名
string queryOne = "SELECT " + column_name + " FROM log.transactions";
MySqlCommand cmdOne = new MySqlCommand(queryOne, connectionString);
MySqlDataReader dataReaderOne = cmdOne.ExecuteReader();
while (dataReaderOne.Read())
{
Console.WriteLine(dataReaderOne[column_name]);
}
dataReaderOne.Close();
太棒了,谢谢你让我知道!