2014-09-11 34 views
0

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

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

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

我试过MySQL数据库中的查询序列,输出是正确的。

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(); 
     } 
    } 

回答

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(); 
     } 
    } 
} 
0

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

在GridViewBind设置你的SQL为:(这会工作在SQL Server中,我不知道关于MySQL)

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

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

+0

谢谢你,在MySQL不行你的建议 – 2014-09-11 08:13:26

0

在MySQL中使用RazorView/c#解决。

见例如:

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"); 
相关问题