Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#ado.net sqlparameter失败_C#_Asp.net_Sql Server_Tsql_Ado.net - Fatal编程技术网

c#ado.net sqlparameter失败

c#ado.net sqlparameter失败,c#,asp.net,sql-server,tsql,ado.net,C#,Asp.net,Sql Server,Tsql,Ado.net,我正在用本地化语言(波斯语)从c#传递sqlparameter,但没有检索到行。数据库已经为persioan_100_ci_ai进行了整理,表是collate Database_默认值 SqlCommand cmd = new SqlCommand(); DataTable dt = new DataTable(); SqlDataReader dr = default(SqlDataReader); dt.TableName = "temp"; try { if (!(conn.Sta

我正在用本地化语言(波斯语)从c#传递sqlparameter,但没有检索到行。数据库已经为persioan_100_ci_ai进行了整理,表是collate Database_默认值

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]=@UserName AND [Pwd]=@Password";
    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]=@UserName 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.Add(new SqlParameter("@Password", "ادمین"));
编辑:

让我们换一种方式试试。如果你想重新编码。我将发布一个来自一个老的大学项目的例子。这基本上是同一个概念。也许不是最好的方法,但它是有效的

我在.aspx页面上使用了DataAdapter、DataSet和GridView控件。您标记了ASP.net,但我不确定您试图使用什么来显示数据

string selectsql2 = "SELECT * FROM [dbo].Event_View WHERE (EventName LIKE '%' + @EventName + '%')";
SqlConnection connect2 = new SqlConnection(connectionstring2);
SqlCommand cmd = new SqlCommand(selectsql2, connect2);
SqlParameter pm = new SqlParameter("@EventName", txtEvents.Text);
cmd.Parameters.Add(pm);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds2 = new DataSet();
adapter.Fill(ds2);
gvEvents.DataSource = ds2;
gvEvents.DataBind();

我没有任何问题,我将这两个值都添加到我的测试数据库中。下面是示例代码

        // Code in BO logic method
        string email = "ادمین";
        string password = "ادمین";


        SqlCommand cmd = new SqlCommand(@"SELECT * FROM Register WHERE Email=@Email AND Deleted=0 AND Password=@Pass");

        cmd.Parameters.AddWithValue(@"Email", email.Trim());
        cmd.Parameters.AddWithValue(@"Pass", password.Trim());

        DataSet dst = Varmebaronen.AppCode.DA.SqlManager.GetDataSet(cmd);

    //DataAccess Methods !
    public static DataSet GetDataSet(SqlCommand cmd)
    {
        return GetDataSet(cmd, "Table");
    }

    public static DataSet GetDataSet(SqlCommand cmd, string defaultTable)
    {
        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            DataSet resultDst = new DataSet();

            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(resultDst, defaultTable);
            }

            return resultDst;
        }
        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }
DataSet
有一条记录,请尝试使用
AddWithValue
。如果再次没有发生任何情况,则问题不在参数中


注意不要使用一个静态连接,应用程序池是您的朋友

尝试将参数和值分配分开,如下所示:

// Create the parameter objects as specific as possible.
    cmd.Parameters.Add("@UserName", System.Data.SqlDbType.NVarChar, 50);
    cmd.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar, 50);

    // Add the parameter values.  Validation should have already happened.
    cmd.Parameters["@UserName"].Value = "ادمین";
    cmd.Parameters["@Password"].Value = "ادمین";

使用cmd.Parameters.AddWithValue,有什么区别吗?@HamidP:不要使用
AddWithValue
!签出并停止使用
.AddWithValue()
-这可能会导致意外和令人惊讶的结果…你说得对,marc-这里我们用类型声明参数。所以内部库无法确定要传递的参数值的类型。特别是在这里,当参数必须为“Nvarchar”时,因为它使用Unicode时,ll尝试了AddWithValue,但结果相同dr.hasrows=false。您应该签出并停止使用
.AddWithValue()
-它可能会导致意外的结果…尝试了AddWithValue,但结果相同dr.hasrows=false。您应该签出并停止使用
.AddWithValue()
-这可能会导致意外的结果…尝试了相同但相同的结果dr.hasrows=false。仍然尝试了AddWithValue但结果相同dr.hasrows=false可能您可以尝试不同的方法?使用数据集。尝试了相同但结果相同的dr.hasrows=false。是否可以尝试dr=cmd.ExecuteReader();