2016-08-04 11 views
2

私たちの在庫を使いやすくするためのアプリケーションを作成しています。
データベース内のいくつかの値を変更する2つの方法を作成しました。 1つはアイテムの在庫を変更するもので、もう1つはこのアイテムが格納されている場所を変更するものです。
私は最初のメソッドを使うと何らかの理由でプログラムが在庫を変更しますが、2番目のメソッドを使うと何も変わりません。
私は実際にはほとんど同じものです。
私は何かを見ている人はいますか?ASP.NET MVC C#Razor SQLほぼ1つの更新クエリの1つが機能しません

public void ChangeStock(double value, string Number) 
    { 
     string ConnString = "[connectionstring]"; 
     string SqlString = "Update Item Set Stock = ? WHERE ItemNumber= ?"; 
     using (OleDbConnection conn = new OleDbConnection(ConnString)) 
     { 
      using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("Stock", value); 
       cmd.Parameters.AddWithValue("ItemNumber", Number); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
      } 
     } 
    } 

    public void ChangeLocation(string Location, string Number) 
    { 
     string ConnString = "[connectionstring]"; 
     string SqlString = "Update Item Set Location = ? WHERE ItemNumber = ?"; 
     using (OleDbConnection conn = new OleDbConnection(ConnString)) 
     { 
      using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("ItemNumber", Number); 
       cmd.Parameters.AddWithValue("Location", Location);  
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
      } 
     } 
    } 
+1

は間違った順序のパラメータですか? – Kritner

答えて

3

あなたはOLEDBを使用しているので、アクセスは、パラメータにを無視します。そのため、パラメータの値を、アクセスが期待する順序で指定する必要があります。これは、パラメータのプレースホルダがCommandTextに表示される順序です。

最初のUPDATEケースでは、正しい順序でパラメータ値を指定しています。しかし、2番目のケースでは、Accessが期待するものとは逆の順序でそれらを提供しています。この注文を使用してください...

cmd.Parameters.AddWithValue("Location", Location); 
cmd.Parameters.AddWithValue("ItemNumber", Number); 
+0

ありがとう!どのように私はそれを逃した可能性があるか分からない。 – Teun

関連する問題