我從本地化語言(波斯語)傳遞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