2016-08-19 112 views
0

我正在使用VS 2008 Express与C#在窗体应用程序项目工作,其中印地语和英语数据都需要存储在SQL Server 2008 Express数据库中。C#.Net Windows应用程序印地语编写和显示

我创建了一个表NVARCAR(MAX)列,用下面的代码为印地文存储到数据库:

com.CommandText = "INSERT INTO test(name, data) VALUES (@a, @b)"; 
com.Parameters.Add("@a", SqlDbType.NVarChar).Value = textBox1.Text.Trim(); 
com.Parameters.Add("@b", SqlDbType.NVarChar).Value = textBox2.Text.Trim(); 

con.Open(); 

if (com.ExecuteNonQuery() > 0) 
    MessageBox.Show("Success"); 
else 
    MessageBox.Show("Failed"); 

con.Close(); 

代码工作完全正常,并在印地文保存数据。

现在下面是我面临的问题:

  1. 检索的时候,我看到问号,而不是在DataGridView中和标签印地文字符。作为选择查询的结果,我需要显示印地文。这是我使用的代码:

    com.CommandText = "SELECT data FROM test WHERE [email protected]"; 
    com.Parameters.Add("@name", SqlDbType.NVarChar).Value = textBox1.Text.Trim(); 
    
    con.Open(); 
    
    SqlDataAdapter da = new SqlDataAdapter(com); 
    
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    
    dataGridView1.DataSource = dt; 
    
    SqlDataReader dr = com.ExecuteReader(); 
    
    if(dr.HasRows) 
    { 
        while(dr.Read()) 
        { 
         textBox2.Text = dr.GetValue(0).ToString(); 
        } 
    } 
    
    con.Close(); 
    

    注:印地文相比,工作正常,但印地文没有在DataGridView中和标签/文本显示。

    注意:我正在使用可能没有安装印地语的Windows 7。另外,我不能安装印地语区域语言,因为它需要许可的窗口,我不能确定每台机器都有许可版本。

  2. 另外,上述代码在复制粘贴的印地文上工作正常。插入数据时,我无法输入印地文。

请帮助。

+0

你的问题是语言上没有安装机。据我所知,没有办法解决这个问题。如果该语言不在机器上,您希望它显示或允许输入该语言? –

+0

嗨。我不确定这是否是语言问题,或者是否安装了印地语。正如描述中所提到的,我可以从浏览器中复制印地文,将其粘贴到.net文本框中,将其保存在数据库中,然后使用印地语文本的Where子句选择查询。我能够通过复制粘贴来阅读印地文。只是无法从数据库的标签中显示它。 –

回答

0

我已经发现了这个问题,并希望分享解决方案,让所有参观者都知道这是正确的方法,并且不需要额外的劳动。

以下是解决方案:

  1. 对于第一个问题,问题的代码就是答案本身。只有两列的数据类型:数据库中的名称和数据需要是Nvarchar。由于错误,我将数据列保存为varchar,这是实际的问题。

  2. 要允许印地文打字,只需添加印地文语言的区域设置的键盘布局,然后按照@cshapcoder的答案在这个岗位:Hindi Input in textbox c# application

0

虽然安装的字体将成为它唯一的选择,但统一也可以用来显示数据,如果数据被存储在十六进制的Unicode为:

void Main() 
{ 
    string input = "0935;093F;0928;094B;0926;"; 
    Regex rx = new Regex(@"([0-9A-Fa-f]{4});"); 
    string output = rx.Replace(input, match => ((char)Int32.Parse(match.Groups[1].Value, NumberStyles.HexNumber)).ToString()); 
    textBox2.Text = output; 
} 
+0

嗨。我认为NVarChar存储Unicode数据。但是你在这段代码中写入的输入字符串是什么?它是什么数据? –

+0

这是一个表示Unicode字符的Unicode数字http://unicode-table.com/zh/#0935 –

相关问题