Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果列存在,则从数据库中选择列_C#_Mysql_Sql_Database - Fatal编程技术网

C# 如果列存在,则从数据库中选择列

C# 如果列存在,则从数据库中选择列,c#,mysql,sql,database,C#,Mysql,Sql,Database,我有一个附件表,每天都会通过在当天添加一个新列来更改 现在我想按月查看出勤率,如果通过添加整月天数查询选择所有列,我不知道这些列是否都存在 BM_query = @"[" + st.m + "/1" + "/" + st.y + "] ," + "[" + st.m + "/2" + "/" + st.y + "] ," + "[" + st.m + "/3" + "/" + st.y + "] ," + "[" + st.m + "/4"

我有一个附件表,每天都会通过在当天添加一个新列来更改 现在我想按月查看出勤率,如果通过添加整月天数查询选择所有列,我不知道这些列是否都存在

 BM_query = @"[" + st.m + "/1" + "/" + st.y + "] ," + "[" + st.m + "/2" + "/" + st.y + "] ," +
                           "[" + st.m + "/3" + "/" + st.y + "] ," + "[" + st.m + "/4" + "/" + st.y + "] ," +
                           "[" + st.m + "/5" + "/" + st.y + "] ," + "[" + st.m + "/6" + "/" + st.y + "] ," +
                           "[" + st.m + "/7" + "/" + st.y + "] ," + "[" + st.m + "/8" + "/" + st.y + "] ," +
                           "[" + st.m + "/9" + "/" + st.y + "] ," + "[" + st.m + "/10" + "/" + st.y + "] ," +
                           "[" + st.m + "/11" + "/" + st.y + "] ," + "[" + st.m + "/12" + "/" + st.y + "] ," +
                           "[" + st.m + "/13" + "/" + st.y + "] ," + "[" + st.m + "/14" + "/" + st.y + "] ," +
                           "[" + st.m + "/15" + "/" + st.y + "] ," + "[" + st.m + "/16" + "/" + st.y + "] ," +
                           "[" + st.m + "/17" + "/" + st.y + "] ," + "[" + st.m + "/18" + "/" + st.y + "] ," +
                           "[" + st.m + "/19" + "/" + st.y + "] ," + "[" + st.m + "/20" + "/" + st.y + "] ," +
                           "[" + st.m + "/21" + "/" + st.y + "] ," + "[" + st.m + "/22" + "/" + st.y + "] ," +
                           "[" + st.m + "/23" + "/" + st.y + "] ," + "[" + st.m + "/24" + "/" + st.y + "] ," +
                           "[" + st.m + "/25" + "/" + st.y + "] ," + "[" + st.m + "/26" + "/" + st.y + "] ," +
                           "[" + st.m + "/27" + "/" + st.y + "] ," + "[" + st.m + "/28" + "/" + st.y + "] ," +
                           "[" + st.m + "/29" + "/" + st.y + "] ," + "[" + st.m + "/30" + "/" + st.y + "] " ;



query = "select Roll_No , Student_Name, " + BM_query + " from [" + textBox2.Text + "_attandence] ";
如果列不存在,则显示无效的列名,如2017年2月7日。。。。等等
我是否可以忽略这些不存在的列并继续下一个和下一个..

如果您的数据表中填充了不断扩展的表中的数据,则可以检查这些列是否存在

table.Columns.Contains("ColumnName");

您可以使用如下查询检索表列的名称:

select COLUMN_NAME
from information_schema.columns
where table_name = 'attendance'
然后循环遍历结果以构造查询

但说真的,你真的应该回到这个问题上。此表与RDBMS所代表的内容背道而驰。当达到表允许的最大列数时,您将怎么做


如果你只想看一个月的唱片,你会怎么做?或者当你想计算两次约会之间的出席人数时?您将无法利用SQL中内置的任何功能。您必须通过构建字符串来构造所有查询,而您尝试执行的所有操作都将是缓慢而脆弱的。

这项工作很好地给出了所有存在的列名称,而忽略了其他列名称

 DECLARE @dd INT;
 SET @dd = 1;

 DECLARE @tmp Varchar(5)
 SET @tmp = '';

 DECLARE @have Varchar(max)
 SET @have = '';

 WHILE @dd <= 31
 BEGIN 
 IF COL_LENGTH('test','2/' + CONVERT(varchar, @dd) + '/2017') IS NOT NULL
 set @have=@have+'2/' + CONVERT(varchar, @dd) + '/2017 ,';
    SET @dd = @dd + 1;

 END;

 PRINT @have;
 GO
声明@dd INT;
设置@dd=1;
声明@tmp Varchar(5)
设置@tmp='';
声明@have Varchar(最大值)
设置@have='';

而@dd则使用以下查询

select COLUMN_NAME
from information_schema.columns
where table_name = 'your table name'

这似乎是有史以来最糟糕的表设计……我听说过《面向凡人的数据库设计》这本书的优点。在构造查询之前,您需要检查列的存在性。但这只是一个痛苦的味道,等待着你们像这样的桌子设计。