【问题标题】:Add column to SQL Server database when year changes年份更改时将列添加到 SQL Server 数据库
【发布时间】:2017-06-06 12:38:49
【问题描述】:

我正在开发一个小项目作为一种爱好,结果走到了死胡同。我正在使用 Visual Studio 和 SQL Server Management Studio。

我使用实体框架模型能够将数据条目添加到具有 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# 中操作代码,然后开始将任何数据条目保存到新创建的列吗?

谢谢

【问题讨论】:

  • 不要那样做,这是糟糕的设计。只需将日期保存在 date/datetime(2) 列中即可。
  • 您认为今年制作一个单独的专栏有什么好处?这只会在您需要查询该数据时给您带来更多问题
  • UPDATE testtable2017 SET Last_Bulb_Replaced_2017 = '" + Calendar1.SelectedDate.ToString() + "' WHERE Room_No ='" + roomNo + "'"; stackoverflow.com/a/30367283/34092。
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 您已在代码中组合了 ADO.NET 和实体框架。在任何情况下,当您在不更改代码的情况下向表中添加新列时,代码都会中断。

标签: c# asp.net sql-server database ssms


【解决方案1】:

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

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

如果该列不存在,则在继续执行脚本的其余部分之前运行 ALTER TABLE 语句来添加它。您还需要使用今天的年份来构建您的 UPDATE 查询,而不是在其中硬编码“2017”。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多