2014-11-08 43 views
0

我连接了一个.MDF数据库文件到C#(Visual Studio)中的aspx文件,但是当我试图执行查询时,它不起作用。在asp.net中连接的SQL Server数据库文件,但查询未执行

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

com.ExecuteNonQuery()返回-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!"); 
} 
+2

'ExecuteNonQuery()'返回**受到DELETE,INSERT或UPDATE操作影响的**行数。既然你没有这样做,那么它总是返回-1 - 这是** NOT **错误条件! [这是**所有**很好,并在MSDN上广泛记录!](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29 .aspx) - 你只需要**去寻找它!** – 2014-11-08 08:54:52

+0

除了@ marc_s的评论,受影响的行的数量严格依赖于使用的游标类型 – Alireza 2014-11-08 08:59:06

+0

@Arun:我会建议你使用executablecalar if你正在检查单个记录。并通过您的选择查询,似乎你正在检查用户是否存在。我对吗?如果你是请不要在select语句中使用*。 – 2014-11-08 09:30:36

回答

0

你想做什么的1?

它总是返回-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 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – khelwood 2014-11-08 08:57:38

+0

好的我有更新 – 2014-11-08 09:04:22

0

而不是依靠ExecuteNonQuery的返回值,在查询中使用COUNT(*)并返回计数使用ExecuteScalar

而且总是(ALWAYS)使用参数化查询:

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()); 

和呼叫转移到Close()对方法的最后

0

请尝试检查连接字符串,它的确定再试试这个代码

,你就会知道,如果选择hjas行或不超过做你想做的事

 con.Open(); 
          cmd.Connection = con; 
          cmd.CommandText = "select * from user where [email protected] and [email protected]"; 
          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(); 
什么3210

我希望尝试一下

相关问题