1

ここ数日、データベースが更新されないという問題が発生しています。データを正常に読み取ることができ、例外も発生していません。データベースを更新しようとしていて、更新後(同じ実行中)に値を再度読み取ろうとしましたが、元の値が保持されているため、データベースが別のフォルダーにコピーされても問題はないようです(新しい場合はコピーを使用していますが、どちらのデータベースも更新されていません)。

これが私が使用しているコードです。ご覧のとおり、いくつかの異なるアプローチを試しましたが、どれもまだうまくいきませんでした。

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();
        }
    }

実際に更新するためのアイデアはありますか?

4

1 に答える 1

1

単なる推測 (msdn でこれを裏付けることはできません): nchar(75) を使用するとパラメーターにスペースが追加され、それによって WHERE 句が失敗する可能性がありますか?

于 2013-09-28T20:29:00.493 に答える