【问题标题】:SqlCommand select all columns with a certain valueSqlCommand 选择具有特定值的所有列
【发布时间】:2016-01-08 08:00:56
【问题描述】:

我有一个SqlDataReader,它需要从我的数据库中读取某些值。选择这些值的SqlCommand 如下所示:

SqlCommand myCommand = new SqlCommand("SELECT * FROM dbo.Confronting_Value", valueConnection);

数据库中的每个条目都由“Attacker”、“Defender”和“Value”组成。所有 3 都包含整数值。

例如

Attacker: "665", Defender: "443", Value: "3". 

可能有多个条目,其中“攻击者”的值为“665”。

现在,SELECT WHERE Attacker = 665 很简单,但我有一个变量 Black.ID。我想选择攻击者与 Black.ID 具有相同值的所有条目。我该怎么做?

【问题讨论】:

    标签: c# sql-server sqlcommand


    【解决方案1】:

    不确定我是否理解正确 - 但只需在查询中添加 参数 即可:

    SqlCommand myCommand = new SqlCommand(@"SELECT * 
                                            FROM dbo.Confronting_Value 
                                            WHERE Attacker = @Value", valueConnection);
    
    // add parameter and set its value to "Black.ID"
    myCommand.Parameters.Add("@Value", SqlDbType.Int).Value = Black.ID;
    

    然后从这里开始,运行您已有的代码。这将选择Attacker 与您的Black.ID 值具有相同值的所有行。

    【讨论】:

    • 谢谢。这就是我一直在寻找的。​​span>
    【解决方案2】:

    抱歉,Black.ID 是什么?代码中的变量?数据库中另一个表的列? 在第一种情况下,将 Where 子句添加到您的命令中,如下所示:

    "SELECT * from dbo.Confronting_Value WHERE Attacker=" + Black.ID

    或更好

    SqlCommand myCommand = new SqlCommand("SELECT * FROM dbo.Confronting_Value WHERE Attacker = @param1", valueConnection);
    myCommand.Parameters.Add("@param1", SqlDbType.Int);
    myCommand.Parameters["@param1"].Value = Black.ID;
    

    希望对你有帮助。

    【讨论】:

    • 没有。不要使用字符串连接。这种连接对SQL Injection 攻击开放。始终使用prepared statements
    • 不选择 *,这是一个可怕的坏习惯。
    • Right Soner Gönul,改进了我的答案。
    • 是的,参数是我正在寻找的。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多