Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 在年份更改时向SQL Server数据库添加列_C#_Asp.net_Sql Server_Database_Ssms - Fatal编程技术网

C# 在年份更改时向SQL Server数据库添加列

C# 在年份更改时向SQL Server数据库添加列,c#,asp.net,sql-server,database,ssms,C#,Asp.net,Sql Server,Database,Ssms,我正在开发一个小项目作为一种爱好,但却走到了死胡同。我正在使用VisualStudio和SQLServerManagementStudio 我使用实体框架模型将数据项添加到具有4列的表中。其中两个应该记录2017年发生的数据输入,如下所示: if (CheckBoxBulb.Checked == true) { string roomNo = ""; roomNo = DropDownList1.SelectedValue.ToString(); testtable201

我正在开发一个小项目作为一种爱好,但却走到了死胡同。我正在使用VisualStudio和SQLServerManagementStudio

我使用实体框架模型将数据项添加到具有4列的表中。其中两个应该记录2017年发生的数据输入,如下所示:

if (CheckBoxBulb.Checked == true)
{
    string roomNo = "";
    roomNo = DropDownList1.SelectedValue.ToString();
    testtable2017 entry = new testtable2017();

    SqlConnection dataConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["iPadLoanConnectionString2"].ToString());

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "UPDATE testtable2017 SET Last_Bulb_Replaced_2017 = '" + Calendar1.SelectedDate.ToString() + "' WHERE Room_No ='" + roomNo + "'";

    cmd.Connection = dataConnection;

    dataConnection.Open();
    cmd.ExecuteNonQuery();
    dataConnection.Close();

    iPadEntities db = new iPadEntities();
    db.testtable2017.Add(entry);
    db.SaveChanges();
}
else if(CheckBoxFilter.Checked == true) 
{
    string roomNo = "";
    roomNo = DropDownList1.SelectedValue.ToString();

    testtable2017 entry = new testtable2017();

    SqlConnection dataConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["iPadLoanConnectionString2"].ToString());

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "UPDATE testtable2017 SET Last_Cleaned_Filter_2017 = '" + Calendar1.SelectedDate.ToString() + "' WHERE Room_No ='" +roomNo +"'";

    cmd.Connection = dataConnection;

    dataConnection.Open();
    cmd.ExecuteNonQuery();
    dataConnection.Close();

    iPadEntities db = new iPadEntities();
    db.testtable2017.Add(entry);
    db.SaveChanges();
}
到目前为止,一切都很好,它运行得很好,但假设到2018年,我想再创建两列,保存2018年内记录的所有数据。有什么方法可以实现这一点吗?如果有,我如何操作C中的代码,然后开始将任何数据条目保存到新创建的列中


谢谢

我同意所有人说这是一个糟糕的设计和可怕的想法

但是,将您的问题视为学术性问题,您可以简单地向程序中添加一些逻辑来检查今天是哪一年,并查询数据库以查看是否存在名称中包含年份的列

如果该列不存在,则在继续执行脚本的其余部分之前,运行ALTERTABLE语句添加该列。您还需要使用当前年份来构建更新查询,而不是在其中硬编码。

添加列:在对象资源管理器中,右键单击要添加列的表,然后选择“设计”。 在“列名”列的第一个空白单元格中单击。 在单元格中键入列名。列名是必需的值。
按TAB键转到数据类型单元格,并从下拉列表中选择数据类型。这是一个必需的值,如果您不选择,它将被指定为默认值。

不要这样做,这是一个糟糕的设计。只需将日期保存在date/datetime2列中。您认为为一年单独设置一列会有什么好处?当您需要查询上次替换的dataUPDATE testtable2017设置时,这只会给您带来更多的问题,Calendar1.SelectedDate.ToString+,其中房间号='+roomNo+';-您不应该将SQL语句连接在一起-而是使用参数化查询来避免SQL注入您在代码中结合了ADO.NET和实体框架。在任何情况下,在不更改代码的情况下向表中添加新列时,代码都将中断。