2010-12-12 4 views
0

안녕 얘들 아 저는 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

메서드가 호출되고 있습니다. 왜 데이터베이스를 업데이트하지 않는지 이해할 수 없습니다. 그 삭제 기능과 동일한 문제. – reggie

0

6 개월 후 ,하지만 나는 다른 검색을하면서 이것을 보았습니다.

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의 모든 설정합니다.

이 메모는이 방법으로 발생하는 모든 사람들을위한 것입니다.

관련 문제