C#和SQLCE数据库未更新

C#和SQLCE数据库未更新,c#,sql,database,C#,Sql,Database,好的,最近几天我的数据库没有更新,我遇到了一个问题。我可以很好地读取数据,也没有任何异常。我尝试更新数据库,然后在更新后再次尝试读取值(在同一次运行期间),它们仍然保留原始值,因此将数据库复制到另一个文件夹似乎没有问题(如果更新,则使用Copy,但两个数据库都未更新) 这是我正在使用的代码。正如你所见,我尝试了几种不同的方法,但都不奏效 public void UpdateDatabaseInStock(string itemName, string tableName) {

好的,最近几天我的数据库没有更新,我遇到了一个问题。我可以很好地读取数据,也没有任何异常。我尝试更新数据库,然后在更新后再次尝试读取值(在同一次运行期间),它们仍然保留原始值,因此将数据库复制到另一个文件夹似乎没有问题(如果更新,则使用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();
        }
    }

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

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

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

如果更新继续进行,是否尝试在数据库中进行检查?似乎根本没有继续。每次我查看实际数据库中的值或将它们与代码一起拉入时,它们都具有相同的起始值。您的名称列是什么数据类型?您是否传递了确切的
itemName
?您的where子句在
select
update
之间有所不同,这不一定不好,但您可能会用
捕获更多的行,如“%”“+itemName+“%”而不是
[Name]='@ItemName'
。是的,我知道其中的差异,我确实预料到了将要解决的问题。但是,我更关心的是让它首先更新。数据类型是nchar(75)顺便说一句,这是update where子句中的问题。您是否尝试过在数据库中检查更新是否继续?似乎根本没有继续。每次我查看实际数据库中的值或使用代码将其拉入时,它们都有相同的起始值。您的名称列是什么数据类型?您是否传递了一个确切的
itemName
?您的where子句在
select
update
之间有所不同,这不一定是坏的,但您可能会用
捕获更多的行,比如“%”“+”itemName+“%”“
,而不是用
[Name]='@itemName'
。是的,我知道这些差异,我确实预料到了我将要解决的问题。然而,我更关心的是让它首先更新。顺便说一下,数据类型是nchar(75),这是update where子句中的问题。我不知道是否是因为你所说的原因,但是where条款失败了。它似乎不知道如何正确处理字符串。所以我改为拉取ID列(一个数字),并在where子句中使用它,它工作得非常好。谢谢!好吧,你可能发现了什么。我不知道是否是因为你所说的原因,但是where条款失败了。它似乎不知道如何正确处理字符串。所以我改为拉取ID列(一个数字),并在where子句中使用它,它工作得非常好。谢谢!