Не удалось обновить базу данных через SqlCeConnection в dot net 3.5 - PullRequest
0 голосов
/ 12 декабря 2010

Эй, ребята Я использую Visual Studio для разработки приложений Windows формы. Csharp - это используемый язык. Я использую следующий метод для обновления записей моих участников. Это не дает мне ошибку при вызове. но когда я проверяю базу данных, обновление значений не происходит. Ниже приведен следующий код:

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 =@lname, 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 ]

2 голосов
/ 12 декабря 2010

Я не могу обнаружить ничего неправильного в методе.

Возможные причины, по которым я бы проверил следующее:

  • Вы используете значение number, которое не соответствует существующей записи.
  • Метод на самом деле никогда не вызывается.
  • Для каждого поля вы вводите то же значение, что и раньше, чтобы оно обновлялось, но не менялось.

Примечание: битовое поле соответствует логическому значению, поэтому вам не нужно создавать числовое значение из логического значения, вы можете использовать его непосредственно как значение

cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = suspend;
0 голосов
/ 14 июня 2011

Шесть месяцев спустя, но я только что наткнулся на это, выполняя другой поиск.

Вам необходимо указать размер для ваших полей данных nVarChar.

Используя ваш код, я установил всеnVarChar SqlDbTypes до 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();

Надеюсь, вы уже решили эту проблему.

Это примечание предназначено для всех остальных, кто происходит вместевот так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...