我只是想知道如何将波斯语字符插入基于服务的数据库中?
当我保存数据时,它会显示'???'
。
我检查过这样的问题。但是,解决方案没有用。
private void button1_Click(object sender, EventArgs e)
{
objConnection.Open();
if (ctypeCheckBox.Checked == true)
st = 1;
else if (ctypeCheckBox.Checked == false)
st = 0;
string query = "INSERT INTO LectureTable(Cname, Cid, Ccredit, Csession, Ctype, CstartDate, CendDate, CstartTime, CendTime) VALUES('" + cnameTextBox.Text + "','" + cidTextBox.Text + "','" + ccreditTextBox.Text + "','" + csessionTextBox.Text + "','" + st + "', '" + cstartDateDateTimePicker.MinDate + "', '" + cendDateDateTimePicker.MaxDate + "', '" + cStartTimeBox.Text + "', '" + cEndTimeBox.Text + "')";
SqlDataAdapter SDA = new SqlDataAdapter(query, objConnection);
SDA.SelectCommand.ExecuteNonQuery();
MessageBox.Show("Inserted!");
objConnection.Close();
}
答案 0 :(得分:3)
两件事:
永远不要将查询字符串与值
组合在一起"INSERT INTO LectureTable(Cname, Cid, Ccredit, Csession, Ctype, CstartDate, CendDate, CstartTime, CendTime) VALUES('" + cnameTextBox.Text + "','" + cidTextBox.Text + "','" + ccreditTextBox.Text + "','" + csessionTextBox.Text + "','" + st + "', '" + cstartDateDateTimePicker.MinDate + "', '" + cendDateDateTimePicker.MaxDate + "', '" + cStartTimeBox.Text + "', '" + cEndTimeBox.Text + "')";
应立即替换为
"INSERT INTO LectureTable(Cname, Cid, Ccredit, Csession, Ctype, CstartDate, CendDate, CstartTime, CendTime)
VALUES(@cname, @cid, @ccredit, @csession, @st, @cstartDateDate, @cendDate, @cStartTime, @cEndTimeB)";
然后你应该使用
SDA.SelectCommand.Parameters.AddWithValue("cname",cnameTextBox.Text);
所有参数。这样可以避免许多问题,包括SQL注入。
nvarchar
数据类型。 答案 1 :(得分:0)
您应该使用SqlParameter
。仅提供一个参数的示例。您可以以相同的方式添加其他参数。
string query = "INSERT INTO LectureTable(Cname) VALUES(@name)";
using(SqlCommand cmd = new SqlCommand(query, SqlConnection))
{
SqlParameter param = new SqlParameter("@name", cnameTextBox.Text);
param.SqlDbType = SqlDbType.String;
cmd.Parameters.Add(param);
.....
}