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