2016-03-23 12 views
4
string GetSerials = "SELECT SerialNumber from Warranty"; 
      string TestUpdateDates = "UPDATE Warranty SET StartDate = '@StartDate', EndDate = '@EndDate' WHERE SerialNumber = '@result'"; 
      //string TestUpdateDates2 = "UPDATE Warranty SET StartDate = cDate(Format('@StartDate', 'MM/dd/yyyy')), EndDate = cDate(Format('@EndDate', 'MM/dd/yyyy')) WHERE(SerialNumber = '@result')"; 

DataTable dataTable = new DataTable(); 
    using (var conn1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Blah\Blah\Blah\Warranty.accdb")) 
    using (OleDbCommand serialCommand = new OleDbCommand(GetSerials, conn1)) 
    { 
    conn1.Open(); 
    dataTable.Load(serialCommand.ExecuteReader()); 

    foreach (DataRow row in dataTable.Rows) 
    { 
     var result = row["SerialNumber"].ToString(); 
     WebRequest request = WebRequest.Create("urlpart1" + result + "urlpart2"); 
     string json; 
     var response = request.GetResponse(); 
     request.ContentType = "application/json; charset=utf-8"; 

     using (var streamr = new StreamReader(response.GetResponseStream())) 
     using (OleDbCommand testupdateCommand = new OleDbCommand(TestUpdateDates, conn1)) 
     using (OleDbCommand updateCommand = new OleDbCommand(UpdateDates, conn1)) 
     using (OleDbCommand deleteCommand = new OleDbCommand(DeleteIncomplete, conn1)) 
     { 
     json = streamr.ReadToEnd(); 
     List<MyObject> list = JsonConvert.DeserializeObject<List<MyObject>>(json); 
     MyObject obj = list[0]; //Base Warranty 

     // obj -- Base Warranty 
     var StartDate = obj.Start; 
     var EndDate = obj.End; 

     //testupdateCommand.Parameters.Add("@StartDate", OleDbType.Date).Value = StartDate; 
     //testupdateCommand.Parameters.Add("@EndDate", OleDbType.Date).Value = EndDate; 
     testupdateCommand.Parameters.AddWithValue("@StartDate", StartDate); 
     testupdateCommand.Parameters.AddWithValue("@EndDate", EndDate); 
     testupdateCommand.Parameters.AddWithValue("@result", result); 

データベースをJSON応答の値で更新しようとしています。 ["SerialNumber"]列のすべての値をループしたいのですが、シリアル番号で開始日終了日を取得することができます。私はこれらの値を同じのシリアル番号に保存したいのですが、そこからそれぞれのフィールド(StartDate、EndDate)にURLを取得していました。なぜこのループはループしませんか?

私はこれをやろうとした他のいくつかの方法をコメントアウトしましたが、得られる出力は最初のSerialNumberだけが変更され、100の値で私の列をループし続けます。追加した場合

MessageBox.Show(result); //SerialNumber 
MessageBox.Show(StartDate.ToString()); 
MessageBox.Show(EndDate.ToString()); 

MessageBox.Showでループスルーしますが、この方法でデータベースを更新しません。なぜそれはそれ自身で繰り返すのですか?

私はACCESS2013を使用していますそれは

+1

更新クエリが間違っています。パラメータのプレースホルダを囲む単一引用符を削除します。そのようにして、それらはパラメタのためのマーカーではなく、文字列です。このコードの周りに空のtry/catchがありますか? – Steve

+0

これらの一重引用符は単なる実験に過ぎませんでした。私はそれらを削除して試しましたが、まだ成功しませんでした。私はコードの周りにtry/catchを持っていません – Havoux

+0

あなたのメソッドは長すぎます - あなたの関数をより小さなコンポーネントに分割し、mainメソッド(または互いに)から呼び出すことができます。これにより、個別にテストして再利用できるようになります。 –

答えて

2

重要である場合には、パラメータを引用しないでください:)

string GetSerials = "SELECT SerialNumber from Warranty"; 
       string TestUpdateDates = "UPDATE Warranty SET StartDate = @StartDate, EndDate = @EndDate WHERE SerialNumber = @result"; 
       //string TestUpdateDates2 = "UPDATE Warranty SET StartDate = cDate(Format(@StartDate, 'MM/dd/yyyy')), EndDate = cDate(Format(@EndDate, 'MM/dd/yyyy')) WHERE(SerialNumber = @result)"; 

    DataTable dataTable = new DataTable(); 
     using (var conn1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Blah\Blah\Blah\Warranty.accdb")) 
     using (OleDbCommand serialCommand = new OleDbCommand(GetSerials, conn1)) 
     { 
     conn1.Open(); 
     dataTable.Load(serialCommand.ExecuteReader()); 

     foreach (DataRow row in dataTable.Rows) 
     { 
      var result = row["SerialNumber"].ToString(); 
      WebRequest request = WebRequest.Create("urlpart1" + result + "urlpart2"); 
      string json; 
      var response = request.GetResponse(); 
      request.ContentType = "application/json; charset=utf-8"; 

      using (var streamr = new StreamReader(response.GetResponseStream())) 
      using (OleDbCommand testupdateCommand = new OleDbCommand(TestUpdateDates, conn1)) 
      using (OleDbCommand updateCommand = new OleDbCommand(UpdateDates, conn1)) 
      using (OleDbCommand deleteCommand = new OleDbCommand(DeleteIncomplete, conn1)) 
      { 
      json = streamr.ReadToEnd(); 
      List<MyObject> list = JsonConvert.DeserializeObject<List<MyObject>>(json); 
      MyObject obj = list[0]; //Base Warranty 

      // obj -- Base Warranty 
      var StartDate = obj.Start; 
      var EndDate = obj.End; 

      //testupdateCommand.Parameters.Add("@StartDate", OleDbType.Date).Value = StartDate; 
      //testupdateCommand.Parameters.Add("@EndDate", OleDbType.Date).Value = EndDate; 
      testupdateCommand.Parameters.AddWithValue("@StartDate", StartDate); 
      testupdateCommand.Parameters.AddWithValue("@EndDate", EndDate); 
      testupdateCommand.Parameters.AddWithValue("@result", result); 
関連する問題