1

以下の関数を作成しました。この関数は、int以外の入力で正しくエラーになり、int入力で監査が正しく開始されたことを返します。残念ながら、テーブルを確認すると、データが実際に挿入されていないことがわかります。

私が間違っていることについて何か提案はありますか?

public string SqlLocation = "Data Source="+ new FileInfo(Path.GetDirectoryName(Application.ExecutablePath) + "\\DRAssistant.sdf");

public string StartAudit(string sqlLocation, string dps)
{
  int dpsInteger;
  if (!int.TryParse(dps, out dpsInteger))
    return "DPS is not a number!";

  try
  {
    var myConnection = new SqlCeConnection(sqlLocation);
    myConnection.Open();
    var myCommand = myConnection.CreateCommand();
    myCommand.CommandText = string.Format("SELECT dps FROM DispatchReviews 
        WHERE dps = {0}", dpsInteger);
    SqlCeDataReader reader = myCommand.ExecuteReader();
    if (reader.Read())
      { return "DPS review has already started!"; }

    myCommand.CommandText = "INSERT INTO DispatchReviews (dps, starttime, 
        reviewer) VALUES (@dps, @starttime, @reviewer)";

    myCommand.Parameters.AddWithValue("@dps", dpsInteger);
    myCommand.Parameters.AddWithValue("@starttime", DateTime.Now);
    myCommand.Parameters.AddWithValue("@reviewer", Environment.UserName);
    myCommand.Prepare();
    myCommand.ExecuteNonQuery();

    myCommand.Dispose();
    myConnection.Close();
    return "Dispatch Review Started!";
    }
  catch(Exception ex)
    { return "Unable to save DPS!" + ex.Message; }
  }

編集:これはばかげた問題であり、SqlLocationを見ている人なら誰でも理解できるでしょう。アプリケーションをビルドするたびに、.sdfの新しいコピーがアプリケーションディレクトリにコピーされ、前の問題が上書きされていました。 。また、更新を確認していたデータベースは、実行ディレクトリにあるデータベースではなく、データベースにコピーされていたデータベースでした。そのため、常に空でした。これに気付いたのは、最初に同じDPSを複数回追加しようとすると、DPSレビュー開始メッセージが表示されましたが、その後の試行では、以前に作成されたエラーが表示されるためです。

4

1 に答える 1

1

接続文字列を教えていただけますか?

ほとんどの場合、これをVisual Studio内でテストすると、データベースファイルが(初期ディレクトリからアプリが実行される出力ディレクトリに)コピーされ、INSERTおそらく問題なく動作しますが、間違ったファイルを見ているだけです。その事実を確認するとき。

于 2013-01-27T19:06:30.647 に答える