C# 使用LINQ将数据插入数据库

C# 使用LINQ将数据插入数据库,c#,sql,linq,C#,Sql,Linq,我写了一个非常简单的方法。它将classDayWeather中的数据保存到数据库中。方法检查表中是否存在当天的行,并更新她或创建新行 为此,我为LINQ添加了新类,并将表从服务器检查器移动到构造函数。它生成新的类WeatherTBL 方法本身如下所示: public static void SaveDayWeather(DayWeather day) { using (DataClassesDataContext db = new DataClassesDataConte

我写了一个非常简单的方法。它将class
DayWeather
中的数据保存到数据库中。方法检查表中是否存在当天的行,并更新她或创建新行

为此,我为LINQ添加了新类,并将表从服务器检查器移动到构造函数。它生成新的类
WeatherTBL

方法本身如下所示:

public static void SaveDayWeather(DayWeather day)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            var existingDay =
              (from d in db.WeatherTBL
               where d.DateTime.ToString() == day.Date.ToString()
               select d).SingleOrDefault<WeatherTBL>();
            if (existingDay != null)
            {
                existingDay.Temp = day.Temp;
                existingDay.WindSpeed = day.WindSpeed;
                existingDay.Pressure = day.Pressure;
                existingDay.Humidity = day.Humidity;
                existingDay.Cloudiness = day.Cloudiness;
                existingDay.TypeRecip = day.TypeRecip;
                db.SubmitChanges();
            }
            else
            {
                WeatherTBL newDay = new WeatherTBL();
                newDay.DateTime = day.Date;
                newDay.Temp = day.Temp;
                newDay.WindSpeed = day.WindSpeed;
                newDay.Pressure = day.Pressure;
                newDay.Humidity = day.Humidity;
                newDay.Cloudiness = day.Cloudiness;
                newDay.TypeRecip = day.TypeRecip;
                db.WeatherTBL.InsertOnSubmit(newDay);
                db.SubmitChanges();
            }
        }
    }
它写下,该测试已成功通过。但若你们看看桌子,它并没有变形。 没有显示错误消息。有人知道问题出在哪里吗

顺便说一句,对不起,我的英语不好

UDP 问题在于:
“…db可能会在每次生成时复制到调试或发布文件夹,覆盖修改后的文件夹”。谢谢@Silvermind

我写了一个简单的方法将员工详细信息保存到数据库中


我编写了一个简单的方法将员工详细信息保存到数据库中


请尝试使用lambda表达式。在您的代码中,var existingDay的类型为IQueryable 为了插入或更新,您需要一个WeatherTBL类型的变量var existingDay。 因此,请尝试使用下面的

 var existingDay =
 db.WeatherTBL.SingleOrDefault(d => d.DateTime.Equals(day.Date.ToString()));

 if(existingDay != null)
  {
   //so on...
  }

希望它能工作。

请尝试使用lambda表达式。在您的代码中,var existingDay的类型为IQueryable 为了插入或更新,您需要一个WeatherTBL类型的变量var existingDay。 因此,请尝试使用下面的

 var existingDay =
 db.WeatherTBL.SingleOrDefault(d => d.DateTime.Equals(day.Date.ToString()));

 if(existingDay != null)
  {
   //so on...
  }

希望它能起作用。

Linq to SQL

        Detail tc = new Detail();


        tc.Name = txtName.Text;
        tc.Contact = "92"+txtMobile.Text;
        tc.Segment = txtSegment.Text;
        var datetime = DateTime.Now;
        tc.Datetime = datetime;
        tc.RaisedBy = Global.Username;
        dc.Details.InsertOnSubmit(tc);

        try
        {


            dc.SubmitChanges();
            MessageBox.Show("Record inserted successfully!");
            txtName.Text = "";
            txtSegment.Text = "";
            txtMobile.Text = "";

        }


        catch (Exception ex)
        {
            MessageBox.Show("Record inserted Failed!");

        }

Linq到SQL

        Detail tc = new Detail();


        tc.Name = txtName.Text;
        tc.Contact = "92"+txtMobile.Text;
        tc.Segment = txtSegment.Text;
        var datetime = DateTime.Now;
        tc.Datetime = datetime;
        tc.RaisedBy = Global.Username;
        dc.Details.InsertOnSubmit(tc);

        try
        {


            dc.SubmitChanges();
            MessageBox.Show("Record inserted successfully!");
            txtName.Text = "";
            txtSegment.Text = "";
            txtMobile.Text = "";

        }


        catch (Exception ex)
        {
            MessageBox.Show("Record inserted Failed!");

        }

我不知道为什么它没有存储数据。但是,您的单元测试只是调用该方法,而不是使用assert来验证结果。@ARS,他没有用于验证的结果。方法返回void。我把结果检查到表中…我明白了。您仍然可以编写一个方法来检索数据并执行断言。无论如何,这是一个不同的讨论主题。您可以检查连接字符串以查看数据是否插入到正确的数据库中。除了@ARS提供的关于连接字符串的点之外,您的实体属性是否已映射?如果您这样做
2。请将客户节点从服务器资源管理器/数据库资源管理器拖到O/R设计器界面上。
然后它们将自动映射,但是,如果在此之后更改了数据库中的任何内容,则应该重做它,或者在
dbml
属性
-页面中更改该
实体
,并且:您的数据库可能会在每次生成时复制到debug或release文件夹,覆盖修改后的数据库。您是否也在查看正确的文件(检查您的
Release/Debug
文件夹)?我不确定为什么它没有存储数据。但是,您的单元测试只是调用该方法,而不是使用assert来验证结果。@ARS,他没有用于验证的结果。方法返回void。我把结果检查到表中…我明白了。您仍然可以编写一个方法来检索数据并执行断言。无论如何,这是一个不同的讨论主题。您可以检查连接字符串以查看数据是否插入到正确的数据库中。除了@ARS提供的关于连接字符串的点之外,您的实体属性是否已映射?如果您这样做
2。请将客户节点从服务器资源管理器/数据库资源管理器拖到O/R设计器界面上。
然后它们将自动映射,但是,如果在此之后更改了数据库中的任何内容,则应该重做它,或者在
dbml
属性
-页面中更改该
实体
,并且:您的数据库可能会在每次生成时复制到debug或release文件夹,覆盖修改后的数据库。您是否也在查看正确的文件(检查
Release/Debug
文件夹)?