【问题标题】:Do parameterized queries work with MySQL in c#? [duplicate]参数化查询在 C# 中与 MySQL 一起使用吗? [复制]
【发布时间】:2018-11-20 07:52:40
【问题描述】:

我正在尝试使用 C# 中的参数运行查询。我遇到了一个没有返回行的问题。我正在从文件中提取 sql 并将其放入命令文本中。运行查询(SELECT 语句)时,不返回任何结果。我已经确认结果在我的数据库中,并且通过正常运行查询是正确的(在替换参数之后)。

            conn.Open();

            //create the command
            var command = conn.CreateCommand();

            //Read sql from file
            FileInfo file = new FileInfo("SQL/GetPage.sql");
            string script = file.OpenText().ReadToEnd();


            command.CommandText = script;

            command.Parameters.AddWithValue("?PageID", PageName);
            command.Prepare();

            MySqlDataReader rdr = command.ExecuteReader();

            rdr.Read();

SQL:

SELECT * FROM `Page` WHERE PageID = '?PageID'

我已经尝试过准备和不准备。我不知道为什么它不起作用。另外,我只期望一个结果最大值(PageID 是唯一的),所以这就是它不在循环中的原因。我也知道我的连接很好,因为我在没有 where 子句的情况下对查询进行了硬编码,它运行良好。

如果有人有任何建议,请告诉我。

谢谢

【问题讨论】:

  • 您的查询需要一个 ID,而您提供了一个名称?
  • 我讨厌看到你这样受苦 :-) 获取 QueryFirst,将你的 sql 粘贴到 QueryFirst 模板中(就像你已经拥有的 .sql 文件)。将为您生成所有这些阅读器、参数、连接和命令代码。你只需要调用生成的 ExecuteScalar() 方法,你就会得到你的整数。免责声明:我写的是 QueryFirst。

标签: c# mysql asp.net


【解决方案1】:

Read() 只是将DataReader 推进到下一条记录(这就是它在循环中使用的原因)。您需要从这条记录中提取数据

while (rdr.Read())
{
    int i = rdr.GetInt32(0);
    string s = rdr.GetString(1);
}

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多