在c#应用程序中设置语言

时间:2014-09-11 07:47:13

标签: c# mysql

我在MySQL数据库连接的c#应用程序中遇到设置语言问题。

正在使用的服务器是英语版的Windows Server 2003。

我需要用德语设置查询输出。

我在MySQL db中尝试了查询序列,输出正确。

mysql> SET lc_time_names = 'de_DE';

SELECT
    CONCAT(
        MONTHNAME(
            STR_TO_DATE(Eng_Month, '%Y-%m')
        ),
        ' ',
        YEAR (
            STR_TO_DATE(Eng_Month, '%Y')
        )
    ) AS DE_Date
FROM
    tbl_month;
Query OK, 0 rows affected

+-----------+
| DE_Date   |
+-----------+
| Juni 2014 |
| Juli 2014 |
+-----------+
2 rows in set

如果在c#应用程序中尝试相同的解决方案,则输出只是英文。

这开始让我相信我的整体结构是不正确的。

我错过了什么?

我非常感谢您在解决这个问题时能给我的任何帮助。

我的代码如下:

   protected override void InitializeCulture()
    {
        Page.Culture = "de-DE";
        Page.UICulture = "de-DE";
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            InitializeCulture();
            MonthLanguage();
            GridViewBind();
            Response.Write(Page.Culture + "<br />");
            Response.Write("Your current culture: " + System.Globalization.CultureInfo.CurrentCulture.DisplayName + "<br />");
        }
    }

   protected void MonthLanguage()
    {
        using (OdbcConnection cn =
            new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
        {
            sql = " SET lc_time_names = 'de_DE'; "; 

            using (OdbcCommand command =
                new OdbcCommand(sql, cn))
            {
                try
                {
                    command.Connection.Open(); 
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw new ApplicationException("operation failed!", ex);
                }
                finally
                {
                    command.Connection.Close();
                }
            }
        }
    }


    public DataTable GridViewBind()
    {
        sql = " ... ";

        try
        {
            dadapter = new OdbcDataAdapter(sql, cn);
            dset = new DataSet();
            dset.Clear();
            dadapter.Fill(dset);
            DataTable dt = dset.Tables[0];
            GridView1.DataSource = dt;
            GridView1.DataBind();

            return dt;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            dadapter.Dispose();
            dadapter = null;
            cn.Close();
        }
    }

3 个答案:

答案 0 :(得分:1)

只需在与查询相同的连接中执行SET lc_time_names即可。您可以MonthLanguage接受连接的参数,只需在您用于查询的连接上调用它。

protected void MonthLanguage( OdbcConnection conn )
{
    var sql = " SET lc_time_names = 'de_DE'; "; 

        using (OdbcCommand command =
            new OdbcCommand(sql, conn ))
        {
            try
            {
                command.Connection.Open(); 
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("operation failed!", ex);
            }
        }
}

public DataTable GridViewBind()
{
    sql = " ... ";
    using( var cn = new OdbcConnection(
           ConfigurationManager.ConnectionStrings["cn"].ConnectionString) )
    {
        try
        {
             MonthLanguage( cn ); // This sets the language for this connection

             dadapter = new OdbcDataAdapter(sql, cn);
             dset = new DataSet();
             dset.Clear();
             dadapter.Fill(dset);
             DataTable dt = dset.Tables[0];
             GridView1.DataSource = dt;
             GridView1.DataBind();

             return dt;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            dadapter.Dispose();
            dadapter = null;
            cn.Close();
        }
    }
}

答案 1 :(得分:0)

您的MonthLanguage创建连接,设置语言,然后关闭失去设置语言效果的连接。填充数据集时,它使用具有默认语言的新连接。您可以尝试以下几点:

在GridViewBind中将SQL设置为:

sql = "SET lc_time_names = 'de_DE'; Select .....";

(这可以在SQL Server中使用;我不了解MySQL。)

或者,只需从SQL返回基本DateTime列,并使用C#代码中正确语言区域设置的事实来格式化它。

答案 2 :(得分:0)

使用RazorView / c#解决了MySQL问题。

参见示例:

var tmp_data = db.Query("SET lc_time_names = 'it_IT'; SELECT MONTHNAME(yourdate) AS MONTH FROM orders GROUP BY MONTH(yourdate), YEAR(yourdate) ORDER BY  yourdate DESC");