1

始める前に、自分で質問を投稿する前に、以前の質問や他のWebサイトですでに提案されていることをすべて試したことをお知らせします。たまたま、何も機能していないようで、私はこれにうんざりしています。

いくつかの背景情報として、これは私のComputing A2プロジェクトに関するものであるため、今はちょっと立ち往生しています。つまり、コードの負荷を理想的に変更することはできません。

とにかく、問題について...私はコードでSQLCeを使用して、さまざまなテーブルから読み取り、1つのテーブルに書き込みます。これまでのところ、テーブルから読み取るためのコードは正常に機能しているため、最初に接続の問題が発生します。私が苦労しているコードは次のとおりです。

        string connectionString = Properties.Settings.Default.BookingSystemDatabaseConnectionString;
        using (SqlCeConnection myConnection = new SqlCeConnection(connectionString))
        {
            myConnection.Open();
            try
            {
                string commandStr = "INSERT INTO bookings(username, room, time) VALUES(@username, @room, @time)";
                SqlCeCommand myCommand = new SqlCeCommand(commandStr);
                //Passes parameters into SQL command.
                myCommand.Parameters.AddWithValue("username", StaticUser.StudentUser.username);
                myCommand.Parameters.AddWithValue("room", roomBox.Text);
                myCommand.Parameters.AddWithValue("time", timeBox.Text);
                //Executes SQL command. Returns the number of affected rows (unecessary for my purposes; a bi-product if you will).
                myCommand.ExecuteNonQuery();
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("Could not write new booking to database. This is likely because the database cannot be reached.", "Error");
                Program.AccessError = true;
            }
            myConnection.Close();
        }

これは、私が抱えている問題と戦うために私が試みた多くの方法の1つにすぎません。私も探検しました:

myCommand.Parameters.Add(new SqlCeParameter("username", StaticUser.StudentUser.username));

パラメータを渡すために...そして今私を逃れる別のメソッド(「。Value = StaticUser.StudentUser.username」を使用すると思います)。さらに、コマンドに「using」ステートメントを使用して、自分で接続を閉じる手間を省いてみました(おそらく、「using」を使用するソリューションを使用することになります)。最後に(これは時系列の回想ではありませんが)、私は試しました:

SqlCeCommand myCommand = new SqlCeCommand("INSERT INTO bookings(username, room, time) VALUES(@username, @room, @time)", myConnection)

繰り返しますが、もちろん、役に立ちません。

私が抱えている問題の実際の症状を強調するために:コードは正常に実行されているようです。上で貼り付けた完全な方法をステップスルーすると、エラーがキャッチされていないことがわかります(もちろん、メッセージボックスは表示されません。後で、ステップスルーはおそらく不要な手順であることに気付きました)。また、私が触れた他の方法では、同じことが起こります。したがって、問題は、テーブル「bookings」が実際に更新されていないことです。

だから、私の質問、なぜですか?


私は明白なことをしませんでした、そして更新されたデータベースのためにデバッグフォルダをチェックしました。

4

2 に答える 2

1

bin/debugフォルダーでデータベースファイルのコピーを探します。接続文字列にフルパスを使用し、できればプロジェクトにsdfファイルを含めないでください(または少なくともビルドアクションをNoneに設定してください)

于 2013-03-25T18:45:41.373 に答える
0

コマンドtryの接続を定義していないと思います

mycommand.connection = connectiostring;
于 2013-03-25T18:48:42.643 に答える