使用参数 SQLcommand 传递列名
passing columnname with a parameter SQLcommand
我一直在谷歌搜索一些我真的不明白的东西。
简而言之,我的问题是这样的;
使用这个时;
String sYear2 = "2020";
string query = @"Select decJan from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
结果返回“111”(这是 2020 年 decJan 列的正确值。
但是在尝试这个的时候;
String sYear2 = "2020";
String sColumn2 = "decJan";
string query = @"Select " + @column + @" from tbFuGraddagar where intRecnum = (select intRecnum from tbfuGraddagar where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
cmd.Parameters.AddWithValue("@column", sColumn2);
我收到 "decJan" 作为结果。
在谷歌搜索时,我发现没有动态 SQL 是不可能的,或者那是糟糕的设计。
但我不明白差异是什么...我只想用类似于@year-parameter 的值更改静态代码。 "interpretation" 不应该关心 SQL 语法的验证,这只是字符串操作的问题。
还是我只是一个糟糕的 C# 编码器?
可能 addwithvalue 方法对于在 select 语句中添加动态列名无效。我认为你应该使用 c# 8.0 功能,字符串插值来解决这个问题。您可以使用字符串插值添加列名。你能试试这个方法吗:
String sYear2 = "2020";
string deccan = "decJan";
string query = $(Select {decJan} from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)
query = @query;
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
我一直在谷歌搜索一些我真的不明白的东西。 简而言之,我的问题是这样的;
使用这个时;
String sYear2 = "2020";
string query = @"Select decJan from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
结果返回“111”(这是 2020 年 decJan 列的正确值。
但是在尝试这个的时候;
String sYear2 = "2020";
String sColumn2 = "decJan";
string query = @"Select " + @column + @" from tbFuGraddagar where intRecnum = (select intRecnum from tbfuGraddagar where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
cmd.Parameters.AddWithValue("@column", sColumn2);
我收到 "decJan" 作为结果。
在谷歌搜索时,我发现没有动态 SQL 是不可能的,或者那是糟糕的设计。
但我不明白差异是什么...我只想用类似于@year-parameter 的值更改静态代码。 "interpretation" 不应该关心 SQL 语法的验证,这只是字符串操作的问题。
还是我只是一个糟糕的 C# 编码器?
可能 addwithvalue 方法对于在 select 语句中添加动态列名无效。我认为你应该使用 c# 8.0 功能,字符串插值来解决这个问题。您可以使用字符串插值添加列名。你能试试这个方法吗:
String sYear2 = "2020";
string deccan = "decJan";
string query = $(Select {decJan} from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)
query = @query;
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);