无法通过dot net 3.5上的SqlCeConnection更新数据库

时间:2010-12-12 11:02:22

标签: c# sql sql-server visual-studio-2008 sql-server-2005

嘿伙计们 我正在使用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 个答案:

答案 0 :(得分:2)

我无法发现方法中的任何错误。

我接下来要检查的可能原因:

  • 您使用的number值与现有记录不对应。
  • 实际上从未调用该方法。
  • 您为每个字段提供与以前相同的值,以便更新但不会更改。

注意:位字段对应于布尔值,因此您不必从布尔值创建数值,您可以直接将其用作值:

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

答案 1 :(得分:0)

六个月后,但我刚刚发现了另一次搜索。

您需要为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();

我希望你已经解决了这个问题。

本说明适用于以这种方式发生的所有其他人。