0

学生のデータを保存する小さなアプリケーションを作成しました。PCにインストールしましたが、問題なく動作しました。

友人のシステムにインストールするように友人に渡しましたが、彼のウィンドウはドイツ語で、ソフトウェアは完璧にインストールされましたが、データを保存しようとしたときに日付フィールドのエラーが発生しました。

彼が電話で私に説明したことは、英語であるコンピューターにデータを保存していたときの言語エラーであり、日時は次のように表示されました。

ここに画像の説明を入力

彼が自分のコンピューターに私のアプリをインストールしたとき、Date of birthフィールドはドイツ語であったため、mssql がクエリを挿入しているときにエラーが発生しました。

私の質問は、クライアント言語の日時ではなく、英語のみの日時をシステム時間としてアプリケーションに強制的に使用させる方法です。

私はsqlServerCeを使用しています

編集

QueryGrid("INSERT INTO students (p_num, p_name, p_fname, p_dob, p_street, p_zip, p_phone, p_email, p_sex, p_comment, p_fax, p_pic, p_regdate, p_idc) VALUES('" + p_num.Text + "', '" + p_name.Text + "', '" + p_fname.Text + "', '" + p_dob.Value + "', '" + p_street.Text + "', '" + p_zip.Text + "', '" + p_pno.Text + "', '" + p_email.Text + "', '" + gender + "', '" + comment_box.Text + "', '" + p_fno.Text + "', '" + p_num.Text + "', '" + DateTime.Now + "', '" + p_idc.Text + "')")
MessageBox.Show("Student successfully added in database.")

上記のコードp_dob.Valueは私の日付値です。私のコンピューターで使用すると、上記Monday, October 22, 201210/22/2012 11:31 AMデータベースに変換して保存しますが、友人のシステムではドイツ語であるため、変換して保存することはできません。

4

1 に答える 1

4

私のコメントで述べたように、文字列を連結するクエリを書くべきではありません: パラメータを含むクエリを使用してください。例:

string query = "INSERT INTO mytable (p_num, p_date) SELECT @num,@dt";
using (SqlConnection conn = new SqlConnection("....."))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.AddWithValue("num", 1);
        cmd.Parameters.AddWithValue("dt", DateTime.Today);

        cmd.ExecuteNonQuery();
    }
    conn.Close();
}

当然、これはコードの一部にすぎませんが、アイデアが得られるはずです。
文字列を連結すると、日付だけでなく double についても多くの問題が発生する可能性があります。

一般に、ローカリゼーション (およびその他) の問題を回避するために、params を使用してクエリを記述します。

于 2012-10-22T07:15:50.557 に答える