2016-08-19 38 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 –

相關問題