C# 如何从SQL表中动态获取单元格值?

C# 如何从SQL表中动态获取单元格值?,c#,sql,C#,Sql,我是SQL新手 如屏幕截图所示,如何根据列名获得任何特定的单元格值 此查询可以根据查询中的列名获取特定的单元格值。列名SizeM在查询中是固定的: String s = Item1; SqlCommand cm = new SqlCommand("SELECT SizeM FROM Table1 where Items = '" +s+ "' "); 结果是:JH 但我想控制查询中的列名,例如,我想在查询中放置一个携带列名的变量,但如果我这样做,则会出现错误,表明该变量不是列名,这是代码:

我是SQL新手

如屏幕截图所示,如何根据列名获得任何特定的单元格值

此查询可以根据查询中的列名获取特定的单元格值。列名SizeM在查询中是固定的:

String s = Item1; 
SqlCommand cm = new SqlCommand("SELECT SizeM FROM Table1 where Items = '" +s+ "' "); 
结果是:JH

但我想控制查询中的列名,例如,我想在查询中放置一个携带列名的变量,但如果我这样做,则会出现错误,表明该变量不是列名,这是代码:

var C = SizeM;
String s = Item1; 
SqlCommand cm = new SqlCommand("SELECT C FROM Table1 where Items = '" + s+ "' "); 
任何人都知道如何根据具有列名的变量控制列名,以便根据此变量获取任何单元格值。谢谢你

我想你想要这个:

String s = Item1; 
String Column = "SizeL";

SqlCommand cm = new SqlCommand("SELECT " + Column + " FROM Table1 where Items = '" +s+ "' ");
我想你想要这个:

String s = Item1; 
String Column = "SizeL";

SqlCommand cm = new SqlCommand("SELECT " + Column + " FROM Table1 where Items = '" +s+ "' ");

您可以这样做:

String s = Item1; 
string column_name = "SizeS";
SqlCommand cm = new SqlCommand("SELECT " + column_name + " FROM Table1 where Items = '" +s+ "' ");

您可以这样做:

String s = Item1; 
string column_name = "SizeS";
SqlCommand cm = new SqlCommand("SELECT " + column_name + " FROM Table1 where Items = '" +s+ "' ");

可以在SQL查询字符串中使用字符串连接。这里我使用变量列 存储列值并连接到SQL查询

string Columns = "SizeL, SizeM"; // Dynamic Columns Goes Here
String s = Item1; 
SqlCommand cm = new SqlCommand("SELECT "+ Columns +" FROM Table1 where Items = '" +s+ "' "); 
甚至可以使用列数组

 string ParaCol = "2,3";
 string[] iCol = ParaCol.split(',');
 string[] Table1Colms = {"Items", "Sizes", "SizeM","SizeL"}; 

 string Columns = "";
 for(int i =0 ; i < Table1Colms.Count() ; i++)
 {
    if(iCol.contains(i.ToString()))
    {
        Columns = Columns  != ""? Columns + ", " +  Table1Colms[i] : Columns + Table1Colms[i];
    }
 }


SqlCommand cm = new SqlCommand("SELECT "+ Columns +" FROM Table1 where Items = '" +s+ "' "); 

可以在SQL查询字符串中使用字符串连接。这里我使用变量列 存储列值并连接到SQL查询

string Columns = "SizeL, SizeM"; // Dynamic Columns Goes Here
String s = Item1; 
SqlCommand cm = new SqlCommand("SELECT "+ Columns +" FROM Table1 where Items = '" +s+ "' "); 
甚至可以使用列数组

 string ParaCol = "2,3";
 string[] iCol = ParaCol.split(',');
 string[] Table1Colms = {"Items", "Sizes", "SizeM","SizeL"}; 

 string Columns = "";
 for(int i =0 ; i < Table1Colms.Count() ; i++)
 {
    if(iCol.contains(i.ToString()))
    {
        Columns = Columns  != ""? Columns + ", " +  Table1Colms[i] : Columns + Table1Colms[i];
    }
 }


SqlCommand cm = new SqlCommand("SELECT "+ Columns +" FROM Table1 where Items = '" +s+ "' "); 

使用变量作为列名时,代码在哪里?@Shaharyar。我更新了它实际上你没有使用变量。像使用s一样使用它。当您使用变量作为列名时,代码在哪里?@Shaharyar。我更新了它实际上你没有使用变量。就像使用s一样使用它。只是吹毛求疵,但是局部范围的变量应该是小写的。所以,列而不是列如果你指导OP来防止SQL注入会更好。@JamesRalston这不是吹毛求疵,这是错误地假设你的标准是正确的,而其他人的标准是错误的。@Shaharyar我差点就SQL注入向OP提出了建议,但我们不知道数据来自哪里,我不想把他弄糊涂。@SteveWellens非常正确。我想我是挑剔了,因为语法突出显示使它看起来像一个类型。一个团队所决定的一切都是最好的,只要它是一致的。只是吹毛求疵,但局部范围的变量应该是较低的。所以,列而不是列如果你指导OP来防止SQL注入会更好。@JamesRalston这不是吹毛求疵,这是错误地假设你的标准是正确的,而其他人的标准是错误的。@Shaharyar我差点就SQL注入向OP提出了建议,但我们不知道数据来自哪里,我不想把他弄糊涂。@SteveWellens非常正确。我想我是挑剔了,因为语法突出显示使它看起来像一个类型。一个团队决定什么是最好的,只要是一致的。