【问题标题】:C#, trouble with SQLreader/commandC#,SQLreader/命令的问题
【发布时间】:2011-09-12 12:34:06
【问题描述】:

SqlDataReader 有点问题:

public string GetVareNavn(string streg)
    {
        string navn = "";
        SqlConnection myCon = DBcon.getInstance().conn();

        string query =
            "SELECT Navn FROM Vare WHERE Stregkode = ) Values('" + streg + "')";

        myCon.Open();
        SqlCommand com = new SqlCommand(query, myCon);
        Console.WriteLine("navn: "+navn);
        SqlDataReader dr = com.ExecuteReader();
        if (dr.Read())
        {
            navn = dr.GetString(1);
        }
        myCon.Close();
        return navn;
    }

它在com.ExecutiveReader(); 处抛出异常,异常是:

')' 附近的语法不正确。

我不知道为什么这个现在不起作用,因为我在另一个项目中使用过它。

【问题讨论】:

  • 我认为你应该学习SQL,这样你才能正确地创建SQL语句。 :)

标签: c# sql visual-studio-2010 sqlcommand


【解决方案1】:

您的查询看起来像是从以前的 INSERT 语句复制而来;您不需要语句末尾的VALUES... 子句。尝试将您的 query 更改为:

string query =
    "SELECT Navn FROM Vare WHERE Stregkode = @streg";

然后修改这段代码使用参数:

SqlCommand com = new SqlCommand(query, myCon);
com.Parameters.AddWithValue("@streg", streg);

【讨论】:

  • 谢谢你们。我正在学习计算机科学,只有 6 个月,所以还在学习。它现在有效。伟大的! :)
【解决方案2】:

它不起作用,因为您的 SQL 已损坏:

SELECT Navn FROM Vare WHERE Stregkode = ) Values('" + streg + "')"

您希望WHERE 子句做什么,您尝试使用什么值?您的更新命令中的复制/粘贴似乎损坏了。

此外,无论如何,您都不应该将值放入 SQL 中 - 您应该使用参数化查询来避免 SQL 注入攻击(并避免格式问题等)。

【讨论】:

    【解决方案3】:

    是的,它肯定会给。为什么将Values 放在select 查询中?这是错误的语法,立即尝试。

    string query = "SELECT Navn FROM Vare WHERE Stregkode = '" + streg + "'";
    

    【讨论】:

    • 所以,这会起作用,但您不应该推荐一些会引发 SQL 注入攻击的东西。
    • 好的,@Yuck 这不是我给自己的查询,我只是修改了他的代码并以正确的语法返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多