2017-11-02 7 views
-1

ここではさまざまな記事で同じトピック/質問を見ましたが、探しているものはありません。 私は2つの同一のテーブルをデータベースに持っています。同じ方法で2つの同一のメソッドを使用したいと思います。最初のメソッドEnterParamsは正常に動作します。&はテーブルにデータを入力しますが、2番目のテーブルは失敗します。 コードを1行ずつデバッグしようとしました。com.ExecuteNonQuery()に行くと、例外(In my controller i have a try/catch method)がキャッチされ、終了します。ExecuteNonQuery()データベースを更新していません

どのような例外があり、どのように処理するのかをどのように知ることができますか?両方の方法が同一であるので、それは、奇妙である1が成功し、一つは、あなたが以下のいずれかから1つを選択することができ

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 ""; 

     } 
     } 
    } 

「InsertData2」ストアドプロシージャのコメントに基づいて答える

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 
+2

SIDに値を渡す手順' InsertData2' [非常に悪い名]は '5'のparamsを期待していますが、'だけ合格した4' –

+0

Visual Studioの「例外設定」ですべての「共通言語ランタイム例外」をマークすると、おそらくスローされる例外に関する詳細が表示されます。 –

+0

デバッグするときは、例外ハンドラで停止し、例外を調べます*。例外オブジェクトには、メッセージおよびスタックトレースを含むエラーに関する情報が含まれます。 – David

答えて

0

を失敗します。

  • SIDを自動インクリメントとして、この列に値を挿入する必要はありません。
  • クエリでSIDを含めると `@のSID`含むコマンドのparamを通じて
+0

テーブルを作成していただきありがとうございます。 SID'を自動インクリメントとして使用しました。 –

+0

@ E.Hysenaj:うまくいきました。ハッピーコーディング! –

関連する問題