C# 和 SQLCE 数据库未更新

本文关键字:更新 数据库 SQLCE | 更新日期: 2023-09-27 18:33:06

好的,最近几天我一直遇到数据库没有更新的问题。 我可以很好地读取数据,而且我也没有任何异常。 我正在尝试更新数据库,然后尝试在更新后(在同一运行期间)再次读取值,并且它们仍然保留原始值,因此将数据库复制到另一个文件夹似乎不是问题(我正在使用 Copy 如果较新但两个数据库都没有更新)。

这是我正在使用的代码。 如您所见,我尝试了几种不同的方法,但都没有奏效。

public void UpdateDatabaseInStock(string itemName, string tableName)
    {
        DataSet data = new DataSet("Items");
        int val;
        //get the file path to the database as a string
        string dbfile =
            new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName +
            "''Database''GameData.sdf";
        //connect to the database
        using (SqlCeConnection cntn = new SqlCeConnection("datasource=" + dbfile))
        {
            //create an adapter to pull all data from the table
            using (SqlCeDataAdapter adpt = new SqlCeDataAdapter
                ("SELECT * FROM " + tableName + " WHERE Name LIKE '%" + itemName + "%'", cntn))
            {
                //put the data into a DataSet
                adpt.Fill(data);
                cntn.Close();
            }

            //fill the data from the Items table into a DataTable to return.
            DataTable itemTable = data.Tables[0];
            DataRow a = itemTable.Rows[0];
            val = (short)a.ItemArray[3] - 1;
            dbfile = "";
            data.Dispose();
            itemTable.Dispose();

            SqlCeCommand cmd = new SqlCeCommand();
            cmd.Connection = cntn;
            cntn.Open();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "UPDATE " + tableName + " SET [In Stock] = @Value WHERE [Name] = '@ItemName'";
            //cmd.Parameters.Add("@Value", SqlDbType.SmallInt);
            //cmd.Parameters["@Value"].Value = val;
            //cmd.Parameters.Add("@ItemName", SqlDbType.NChar, 75);
            //cmd.Parameters["@ItemName"].Value = itemName;
            cmd.Parameters.AddWithValue("@Value", val);
            cmd.Parameters.AddWithValue("@ItemName", itemName);

            cmd.ExecuteNonQuery();       
            //close the conenction
            cntn.Close();
            cmd.Dispose();
        }
    }

有什么想法可以让它实际更新吗?

C# 和 SQLCE 数据库未更新

只是一种预感(无法在 msdn 上证实这一点):可能是使用 nchar(75) 会不会给参数添加空格,从而导致 WHERE 子句失败?