0

我制作了一个小型应用程序,用于保存学生数据。我把它安装在我的电脑上,它工作得很好。

我把它给了我的一个朋友在他的系统上安装它,但是他的窗口是德语的,他完美地安装了软件,但是当他试图存储数据时,他得到了日期字段的错误。

他在电话里向我解释说这是一个语言错误,因为当我将数据存储在我的电脑上时,日期时间是这样的:

在此处输入图像描述

现在,当他在他的计算机上安装我的应用程序时,该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();
}

当然这只是代码的一部分,但应该给你一个想法。
连接字符串会给你带来很多麻烦,不仅是日期,还有双打。

一般来说:使用参数编写查询以避免本地化(和其他)问题。

于 2012-10-22T07:15:50.557 回答