2016-11-27 24 views
0

我想從MS Access數據庫中獲取字符串並通過使用數據集插入到SQL Server數據庫。但是我的SQL語句中的utf8字符串插入的形式如????????? - 我能對此有何看法?使用數據集發送Unicode字符串從MS Access到SQL Server

這是我的代碼:

OleDbCommand cmd2 = new OleDbCommand("select * from t_about_us", con_access); 
OleDbDataAdapter da2 = new OleDbDataAdapter(cmd2); 

DataSet ds2 = new DataSet(); 
da2.Fill(ds2, "t_about_us"); 

con.Open(); 
string command2 = "insert into t_about_us(matn,see,metatag_description,metatag_keywords,metatag_author) values('" + 
      Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(ds2.Tables[0].Rows[0]["matn"].ToString())) + "','" + 
      Convert.ToInt32(ds2.Tables[0].Rows[0]["see"].ToString()) + "','" + 
      ds2.Tables[0].Rows[0]["metatag_description"].ToString() + "','" + 
      ds2.Tables[0].Rows[0]["metatag_keywords"].ToString() + "','" + 
      ds2.Tables[0].Rows[0]["metatag_author"].ToString() + "')"; 

SqlCommand cmdd2 = new SqlCommand(command2, con); 
cmdd2.ExecuteNonQuery(); 
con.Close(); 
+2

[SQL注入警報( http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 您應該**不**將您的SQL語句連接在一起 - 使用**參數化查詢**避免SQL注入 –

回答

0

通過使用動態SQL建設有刺痛文字的SQL語句像'this'你是隱式轉換字符串從Unicode到由使用單字節字符集SQL Server以及任何不映射到該目標字符集的Unicode字符將被替換爲問號。

因此,例如,與我的SQL Server ...

cmd.CommandText = "INSERT INTO myTable (textCol) VALUES ('γιορτή')"; 
cmd.ExecuteNonQuery(); 

...將被插入爲...

????t? 

...即使[textCol]定義作爲NVARCHAR列。

正確的做法是使用參數化查詢,像這樣

cmd.CommandText = "INSERT INTO myTable (textCol) VALUES (@word)"; 
cmd.Parameters.Add("@word", System.Data.SqlDbType.NVarChar).Value = "γιορτή"; 
cmd.ExecuteNonQuery(); 
0

謝謝我的朋友最後我的代碼工作,這就是答案:

OleDbCommand cmd2 = new OleDbCommand("select * from t_about_us", con_access); 
     OleDbDataAdapter da2 = new OleDbDataAdapter(cmd2); 
     DataSet ds2 = new DataSet(); 
     da2.Fill(ds2, "t_about_us"); 

     con.Open(); 
     SqlCommand cmd1 = new SqlCommand("INSERT INTO t_about_us(matn,see,metatag_description,metatag_keywords,metatag_author) VALUES (@matn,@see,@metatag_description,@metatag_keywords,@metatag_author)",con); 
     cmd1.Parameters.Add("@see", System.Data.SqlDbType.BigInt).Value = Convert.ToInt32(ds2.Tables[0].Rows[0]["see"].ToString()); 
     cmd1.Parameters.Add("@matn", System.Data.SqlDbType.NVarChar).Value = ds2.Tables[0].Rows[0]["matn"].ToString(); 
     cmd1.Parameters.Add("@metatag_description", System.Data.SqlDbType.NVarChar).Value = ds2.Tables[0].Rows[0]["metatag_description"].ToString(); 
     cmd1.Parameters.Add("@metatag_keywords", System.Data.SqlDbType.NVarChar).Value = ds2.Tables[0].Rows[0]["metatag_keywords"].ToString(); 
     cmd1.Parameters.Add("@metatag_author", System.Data.SqlDbType.NVarChar).Value = ds2.Tables[0].Rows[0]["metatag_author"].ToString(); 
     cmd1.ExecuteNonQuery(); 
     con.Close(); 
相關問題