我从本地化语言(波斯语)传递sqlparameter从C#但没有行检索。数据库已经整理了persioan_100_ci_ai和表格整理database_defaultc#ado.net sqlparameter失败
SqlCommand cmd = new SqlCommand();
DataTable dt = new DataTable();
SqlDataReader dr = default(SqlDataReader);
dt.TableName = "temp";
try {
if (!(conn.State == ConnectionState.Closed))
conn.Close();
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.Connection = conn;
string qry = "Select * from users WHERE [Name][email protected] AND [Pwd][email protected]";
cmd.commandtext = qry;
cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 50).Value = "ادمین";
cmd.Parameters.Add("@Password", SqlDbType.NVarChar, 50).Value = "ادمین";
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows) {
dt.Load(dr);
}
return dt;
} catch (Exception ex) {
return null;
} finally {
dt = null;
cmd.Connection = null;
cmd.Parameters.Clear();
cmd.Dispose();
}
它的工作原理在SSMS
declare @UserName nvarchar(50) = 'ادمين'
declare @Password nvarchar(50)= 'ادمين'
select * from Users where [name][email protected] and [Pwd] = @Password
它甚至当我在查询,而不是参数
SqlCommand cmd = new SqlCommand();
DataTable dt = new DataTable();
SqlDataReader dr = default(SqlDataReader);
string pLoginName = "ادمین";
string pPassword = "ادمین";
dt.TableName = "temp";
try {
if (!(conn.State == ConnectionState.Closed))
conn.Close();
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.Connection = conn;
string qry = "Select * from users WHERE [Name]='" + pLoginName + "' AND [Pwd]='" + pPassword + "'";
cmd.CommandText = qry;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows) {
dt.Load(dr);
}
return dt;
} catch (Exception ex) {
return null;
} finally {
dt = null;
cmd.Connection = null;
cmd.Parameters.Clear();
cmd.Dispose();
}
想不通嵌入变量工作在哪里我错了。 请有任何人指出。
使用cmd.Parameters.AddWithValue,有什么区别? – dotctor 2014-11-03 15:55:56
@HamidP:**不要**使用“AddWithValue”!看看[我们可以停止使用AddWithValue()了吗?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)并停止使用'.AddWithValue()' - 它可能会导致意外的和令人惊讶的结果... – 2014-11-03 19:57:06
你是正确的marc - 在这里我们声明参数类型。所以内部库不能确定你传递的参数值的类型。具体来说,当参数必须是“Nvarchar”时,因为它使用unicode – 2014-11-05 04:18:58