在表单中输入阿拉伯语后,按下插入按钮以在数据库中插入字段。但是角色转向奇怪的问号,如:"?????"
。数字或英文字符不会发生这种情况。
如何键入阿拉伯语并将其作为阿拉伯语在数据库中保存,而不是"?????"
?
这是一些代码
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["StoreConnectionString"].ToString());
public AddBook()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string X;
cn.Open();
SqlCommand cm = new SqlCommand("SELECT COUNT(*) FROM StoreItem", cn);
Int32 count = (Int32)cm.ExecuteScalar();
X = count.ToString();
cn.Close();
SqlCommand cmd = new SqlCommand("insert into StoreItem (ID, Title, Writer, Price, Qun, Date) Values ('" + X + "','" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + textBox4.Text + "', '" + DateTime.Now.ToString("d/M/yyyy") + "')", cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
textBox1.Text = null;
textBox2.Text = null;
textBox3.Text = null;
textBox4.Text = null;
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
和
private void Rsh()
{
SqlDataAdapter ADAP = new SqlDataAdapter("Select * FROM StoreItem", cn);
DataSet DS = new DataSet();
ADAP.Fill(DS, "Store");
dataGridView1.DataSource = DS.Tables["Store"];
dataGridView1.Columns[1].Width = 200;
dataGridView1.Columns[0].HeaderCell.Value = "#";
dataGridView1.Columns[1].HeaderCell.Value = "عنوان الكتاب";
dataGridView1.Columns[2].HeaderCell.Value = "الكاتب";
dataGridView1.Columns[3].HeaderCell.Value = "السعر";
dataGridView1.Columns[4].HeaderCell.Value = "الكمية";
dataGridView1.Columns[5].HeaderCell.Value = "تاريخ دخول";
}
答案 0 :(得分:7)
surly这些列的数据类型是varchar。
您只需将其更改为nvarchar即可保存。另外不要忘记添加前缀N.请参阅以下查询。
如果name是nvarchar
insert into Emp (name) values (N'test')
答案 1 :(得分:2)
看着你的屏幕截图,看起来好像你已经有了一些unicode数据,但是我粗略地自上而下地走过去。您应该使用nvarchar
来存储字符串,因为它是unicode,它会记录阿拉伯语或扩展字符而不会出现问题。
您还需要检查您的角色编码是否已设置(UTF8通常是一个不错的选择)并正确地传递到所有不同的地方。如果您使用SqlConnection
和SqlCommand
,那么最好将值作为参数传递,以确保正确处理所有内容并避免注入攻击。如果您使用的是Entity Framework,那么我的知识应该没有其他步骤。