如何从每个月在运行时动态创建的SQL表中读取?

时间:2017-08-03 04:52:29

标签: c# sql sql-server c#-4.0

我正在研究生物识别考勤系统。设备会根据其中注册的用户数生成这些User punch logs。现在问题是,每当我尝试将硬件日志与其通信SDK同步时,每个月都会自动生成一个新表来存储设备日志。

例如:

对于2017年7月的所有User punches,都有一个名为DeviceLogs_7_2017的SQL表。同样,对于八月,有DeviceLogs_8_2017

现在我正在使用Visual Studio 2012和C#创建一个不同的前端(除了系统提供的软件),我需要从前端读取这些日志以使用某些公式计算出勤率。

现在我不知道如何阅读它们,因为它们每个月都在变化。

可以使用某些存储过程查询中的变量来完成吗?

表格说明如下:

DeviceLogId int NULL
DownloadDate    datetime    NULL
DeviceId    int NULL
UserId  nvarchar    50
LogDate datetime    NULL
Direction   nvarchar    100
AttDirection    nvarchar    255
C1  nvarchar    255
C2  nvarchar    255
C3  nvarchar    255
C4  nvarchar    255
C5  nvarchar    255
C6  nvarchar    255
C7  nvarchar    255
WorkCode    nvarchar    100
UpdateFlag  int NULL

在此表格之外,我想要UserIDLogDateWorkCode列中的数据。请帮助我让我的头脑朝着解决这个问题的方向努力。

1 个答案:

答案 0 :(得分:0)

首先看到这个以打开与DB How to directly execute SQL query in C#? Have example batch file

的连接

以下是上述链接的修改代码(更改连接字符串)。您可以使用此代码。您可以使用其他日期,而不是使用Now()。例如,如果您总是要上个月提取数据,则可以执行DateTime dt = DateTime.Now().AddMonths(-1)

string queryString = "SELECT UserID, LogDate, WorkCode from DeviceLogs_" + Month(DateTime.Now()) + "_" + Year(DateTime.Now());
string connectionString = "Server=.\PDATA_SQLEXPRESS;Database=;User Id=sa;Password=2BeChanged!;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    connection.Open();
    SqlDataReader reader = command.ExecuteReader();
    try
    {
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}, {2}",
            reader["UserId"],reader["LogDate"]), reader["WorkCode"]));// etc
        }
    }
    finally
    {
        // Always call Close when done reading.
        reader.Close();
    }
}

上面代码的第一行是您需要修改以使用用户选择的from和to日期创建具有生成的表名的联合。您需要重新学习SQL语言以及如何使用连接和联合。或者您可以在循环中触发多个查询(如下面的注释所示),每个查询一个表,以C#代码收集返回的数据并显示。看来有些非常聪明的人设计了数据库。一个理智的人不会在不同月份创建不同的表,而是一个表就足够了,因为该表有LogDate