2010-12-12 22 views
0

Hey guys 私はVisual Studioを使用してWindowsフォームアプリケーションを開発しています。 Csharpは使用されている言語です。私は、以下のメソッドを使用してメンバーレコードを更新します。呼び出されたときにそれは私にエラーを与えません。しかし、私がデータベースをチェックするとき、更新値は起こりません。以下は、次のコードです:ドットネット上のSqlCeConnectionを使用してデータベースを更新できません

public static void updatePersonInfo(int number, string password,string firstname, string lastname, string address, string city, string province, string postal, int typeid,bool suspend) 
    { 
     SqlCeConnection sqlConn = null; 
     SqlCeCommand cmdUpdate; 
     int susBit = 0; 
     if (suspend == true) 
     { 
      susBit = 1; 
     } 

     try 
     { 
      sqlConn = new SqlCeConnection(databaseString); 
      sqlConn.Open(); 


      cmdUpdate = new SqlCeCommand(@"UPDATE PersonInfo 
            SET First_Name = @fname, Last_Name [email protected], Address = @address, 
            City = @city, Province = @prov, Postal_Code = @post, Type = @type, 
            Password = @pass, Suspended = @susp 
            WHERE Number = @numb", sqlConn); 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@numb", SqlDbType.Int)).Value = number; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@fname", SqlDbType.NVarChar)).Value = firstname; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@lname", SqlDbType.NVarChar)).Value = lastname; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@address", SqlDbType.NVarChar)).Value = address; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@city", SqlDbType.NVarChar)).Value = city; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@prov", SqlDbType.NVarChar)).Value = province; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@post", SqlDbType.NVarChar)).Value = postal; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@type", SqlDbType.Int)).Value = typeid; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@pass", SqlDbType.NVarChar)).Value = password; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = susBit; 
      cmdUpdate.ExecuteNonQuery(); 

     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
     finally 
     { 
      if (sqlConn != null) 
      { 
       sqlConn.Close(); 
      } 
     } 

    } 

答えて

2

私はこの方法で間違った何かを見つけることができません。私は次のチェックでしょう

考えられる理由:既存のレコードに対応していないnumber値を使用している

  • このメソッドは実際には呼び出されません。
  • 各フィールドに以前と同じ値を指定しているため、更新されますが変更されることはありません。

注:

cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = suspend; 
+0

メソッドが呼び出されています。私はなぜそれがデータベースを更新していないのか理解できません。それはdelete関数と同じ問題です。 – reggie

0

半年後:あなたは値として直接使用することができ、ブールから数値を作成する必要はありませんので、ビットフィールドは、ブール値に対応しかし、私はちょうど別の検索を行ってこれに出くわしました。

nVarCharデータフィールドにサイズを指定する必要があります。

あなたのコードを使用して、私はあなたがすでにこの問題を解決を願ってい50に....

cmdUpdate.Parameters.Add(new SqlCeParameter("@numb", SqlDbType.Int)).Value = number; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@fname", SqlDbType.NVarChar, 50)).Value = firstname; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@lname", SqlDbType.NVarChar, 50)).Value = lastname; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@address", SqlDbType.NVarChar, 50)).Value = address; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@city", SqlDbType.NVarChar, 50)).Value = city; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@prov", SqlDbType.NVarChar, 50)).Value = province; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@post", SqlDbType.NVarChar, 50)).Value = postal; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@type", SqlDbType.Int)).Value = typeid; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@pass", SqlDbType.NVarChar, 50)).Value = password; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = susBit; 
cmdUpdate.ExecuteNonQuery(); 

nVarCharSqlDbTypesのすべてを設定します。

このメモは、この方法で起こるすべての人のためのものです。

関連する問題