ExecuteNonQuery()不更新数据库

时间:2017-11-02 10:17:25

标签: c#

我在这里的各个帖子中看到了相同的主题/问题,但似乎没有我正在寻找的东西。 我在数据库中有两个相同的表,我想以相同的方式填充它们,使用两种相同的方法,它们只有不同的数据存储。第一种方法EnterParams工作正常&填充表,但第二个失败。 尝试逐行调试代码,当它转到com.ExecuteNonQuery()时,它会捕获异常(In my controller i have a try/catch method)并停止。

我怎么知道它是什么异常以及如何处理它?这很奇怪,因为两种方法都相同,一种成功,一种失败

namespace Test.Models
{

public class ArduinoEntities : DbContext 
{
    public ArduinoEntities()
        : base("name=ArduinoEntities")
    {
    }

    public virtual DbSet<TempHum> TempHum { get; set; }
    public virtual DbSet<TempHum2> TempHum2 { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    }
}

[Table("TempHum")]
public class TempHum
{
    [Key]
    public long SID { get; set; }   
    public string Humidity { get; set; }
    public string TemperatureC { get; set; }
    public string LightLevel { get; set; }
    public string Dust { get; set; }      
}

public class EnterParams
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ArduinoEntities"].ConnectionString);
    TempHum Emp = new TempHum();

    public string AddParams(TempHum Emp)
    {
       SqlCommand com = new SqlCommand("InsertData", con);
        com.CommandType = CommandType.StoredProcedure;

        com.Parameters.AddWithValue("@Humidity", Emp.Humidity);
        com.Parameters.AddWithValue("@TemperatureC", Emp.TemperatureC);
        com.Parameters.AddWithValue("@LightLevel", Emp.LightLevel);
        com.Parameters.AddWithValue("@Dust", Emp.Dust);

        con.Open();
        com.ExecuteNonQuery();
        con.Close();

        return "";
    }
}

[Table("TempHum2")]
public class TempHum2
{
    [Key]
    public long SID { get; set; }
    public string Humidity { get; set; }
    public string TemperatureC { get; set; }
    public string LightLevel { get; set; }
    public string Dust { get; set; }
}

public class EnterParams2
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ArduinoEntities"].ConnectionString);
    TempHum2 Emp = new TempHum2();

    public string AddParams2(TempHum2 Emp)
    {
        SqlCommand com = new SqlCommand("InsertData2", con);
        com.CommandType = CommandType.StoredProcedure;

        com.Parameters.AddWithValue("@Humidity", Emp.Humidity);
        com.Parameters.AddWithValue("@TemperatureC", Emp.TemperatureC);
        com.Parameters.AddWithValue("@LightLevel", Emp.LightLevel);
        com.Parameters.AddWithValue("@Dust", Emp.Dust);

        con.Open();
        com.ExecuteNonQuery();
        con.Close();

        return "";

       }
      }
    }

&#34; InsertData2&#34;存储过程

CREATE PROCEDURE [dbo].[InsertData2]
@SID int,
@Humidity VARCHAR(50),
@TemperatureC VARCHAR(50),
@LightLevel VARCHAR(50),
@Dust VARCHAR(50)
AS
begin
    INSERT INTO [dbo].[TempHum2] ([Humidity],[TemperatureC],[LightLevel],[Dust]) VALUES (@Humidity,@TemperatureC,@LightLevel,@Dust)
end

1 个答案:

答案 0 :(得分:0)

根据评论回答,您可以从以下选项中选择一个:

  • 将列SID设为自动增量,然后您无需在此列中插入值。
  • 在您的查询中包含SID,并通过命令param传递SID的值