c#
  • sql-server
  • 2013-05-13 138 views 0 likes 
    0

    这是我用C#编写的代码段。 MobileName是我的表中的列。 问题是我的查询格式有问题。如果我们想在C#中使用OR连接两个查询,那么语法是否正确?C#SQL Server查询

    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM [Contact Management] WHERE 
         Mobile='"+Convert.ToInt32(txtSearch.Text)+"' OR Name='"+txtSearch.Text+"'",con); 
    
    +4

    不正确的,在所有你不应该有'txtSearch.Text'缠任何引号什么那么......我会亲自看看使用'参数Query'以及 – MethodMan 2013-05-13 21:14:35

    +0

    ,但如果我删除代码段之后,然后它正在工作....这是删除或部分后,我可以至少选择移动=某些价值...所以引号不会产生任何问题,我认为如此...... – user2375245 2013-05-13 21:17:01

    +1

    你需要使用参数插入用户数据到SQL查询... – konkked 2013-05-13 21:20:21

    回答

    9

    不,语法是不正确的。它很容易受到SQL注入攻击。你需要建立这样的:

    SqlCommand cmd = new SqlCommand("SELECT * FROM [Contact Management] WHERE 
        Mobile= @Search OR Name= @Search") 
    SqlDataAdapter = new SqlDataAdapter(cmd); 
    cmd.Parameters.Add("@Search", SqlDbType.NVarChar, 50).Value = txtSearch.Text; 
    

    你也可以写查询是这样的:

    SELECT * FROM [Contact Management] WHERE @Search IN (Mobile, Name) 
    
    +0

    保持SQL注入部分放在一边没有任何使用参数化查询的方式....我是一个初学者,所以它是很难理解.... – user2375245 2013-05-13 21:21:48

    +1

    参数化查询是_only_可以接受的方式来执行此操作,而无需在sql注入中运行问题,我不会帮你编写易受攻击的代码。 – 2013-05-13 21:27:08

    5

    像往常一样,从来不使用字符串连接来构建SQL命令。使用参数化查询

    string query = "SELECT * FROM [Contact Management] WHERE [email protected] OR [email protected]"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.Parameters.AddWithValue("@mobile", Convert.ToInt32(txtSearch.Text)); 
    cmd.Parameters.AddWithValue("@name", txtSearch.Text); 
    SqlDataAdapter da= new SqlDataAdapter (cmd); 
    

    参数化查询将保存您的数据库从Sql注入攻击,但也解析您的输入文本中的问题。如果在搜索文本中你有单引号呢?连接时会出现语法错误。

    但是,让我说,你的代码将在此之前失败。如果你的txtSearch中有一个数字,那么一切都会工作,但如果你有一个字符串。转换为Convert.ToInt32的数字将失败。最好使用

    SqlCommand cmd = new SqlCommand(); 
    string query; 
    int numSearch; 
    if(Int32.TryParse(txtSearch.Text, out numSearch)) 
    { 
        query = "SELECT * FROM [Contact Management] WHERE [email protected]"; 
        cmd.Parameters.AddWithValue("@p1", numSearch); 
    } 
    else 
    { 
        query = "SELECT * FROM [Contact Management] WHERE [email protected]"; 
        cmd.Parameters.AddWithValue("@p1", txtSearch.Text); 
    } 
    cmd.CommandText = query; 
    .... 
    
    +1

    避免.AddWithValue() – 2013-05-13 21:29:54

    相关问题