C# SQL Server数据库文件已连接到asp.net,但查询未执行

C# SQL Server数据库文件已连接到asp.net,但查询未执行,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我在C Visual Studio中将.MDF数据库文件连接到我的aspx文件,但当我尝试执行查询时,它不起作用 下面给出了出现问题的代码。请帮帮我 com.ExecuteNonQuery返回-1,我想如果执行成功,它应该返回1 SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\karunya\Documents\Visual Studio 2010\Project

我在C Visual Studio中将.MDF数据库文件连接到我的aspx文件,但当我尝试执行查询时,它不起作用

下面给出了出现问题的代码。请帮帮我

com.ExecuteNonQuery返回-1,我想如果执行成功,它应该返回1

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\karunya\Documents\Visual Studio 2010\Projects\Login\Login\App_Data\MyDB.mdf;Integrated Security=True;User Instance=True");

con.Open();
string sql = "SELECT * FROM Data WHERE user = '"+user.Text+"' ";
SqlCommand com = new SqlCommand(sql, con);
int tmp = Convert.ToInt32(com.ExecuteNonQuery());

con.Close();

if (tmp == 1)
{
    con.Open();
    sql = "SELECT pass FROM LogTable WHERE user = '" + user.Text + "'";
    SqlCommand com1 = new SqlCommand(sql, con);
    string password = com1.ExecuteScalar().ToString();

    if (password == pass.Text)
    {
       Response.Write("Access Granted!");
    }
    else
    {
       Response.Write("Access Denied!");
    }
 }
 else
 {
    Response.Write("User Name Incorrect!");
 }

你想干什么

它将始终返回-1,因为您正在选择表

这样做

 DataTable dt = new DataTable();
        using (var conn = new SqlConnection(connectionLib))
        {
            try
            {
                using (var cmd = new SqlCommand(Query, conn))
                {

                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                    conn.Close();
                    da.Dispose();
                }
            }
            catch
            {
            }
        }
现在根据您检查条件,如果您想检查行的编号,请检查

dt.rows.cout

不要依赖ExecuteOnQuery的返回值,而是在查询中使用COUNT*并使用ExecuteScalar返回计数

并始终使用参数化查询:

string sql = "SELECT COUNT(*) FROM Data WHERE user = @user";
SqlCommand com = new SqlCommand(sql, con);
com.Parameters.AddWithValue("@user", user.Text);
int tmp = Convert.ToInt32(com.ExecuteScalar());

并将调用移到接近方法结尾的位置

请尝试检查连接字符串是否正常,然后尝试此代码

您将知道选择或不选择hjas行是否会执行您想要执行的操作

       con.Open();
                            cmd.Connection = con;
                            cmd.CommandText = "select * from user where login=@login and pass=@psw";
                            cmd.Parameters.Add(new SqlParameter("@login", SqlDbType.VarChar, 255)).Value = txtpsedu.Text;
                            cmd.Parameters.Add(new SqlParameter("@psw", SqlDbType.VarChar, 255)).Value = txtlogin.Text;

   dr = cmd.ExecuteReader();

                    if (dr.Read())
                    {

                   //// do  what  you  want  here  

                    }

                    else
                    {

                        Response.Write("User Name Incorrect!");

                    }
                    dr.Close();
                    con.Close();

我希望尝试一下

ExecuteOnQuery返回受删除、插入或更新操作影响的行数。因为你没有做这些,所以它总是返回-1-这不是一个错误条件你只需要去寻找它!除了@marc_的注释外,受影响行的数量与光标类型密切相关used@Arun:如果要检查单个记录,我建议您使用executescalar。通过select查询,您似乎正在检查用户是否存在。我说得对吗?如果是,请不要在select语句中使用*。