【问题标题】:How do I get the output from Database.ExecuteNonQuery?如何从 Database.ExecuteNonQuery 获取输出?
【发布时间】:2013-11-25 04:19:20
【问题描述】:

我想使用 Database.ExecuteNonQuery 或类似的东西来执行一个 sql 脚本,然后捕获输出。

例如:创建了 xxx 表

我的脚本:

        strArray = Regex.Split(streamReader.ReadToEnd(), "\r\nGO");
        if (connection.State == ConnectionState.Open)
        {
            System.Data.SqlClient.SqlCommand cmd;
            foreach (string sql in strArray)
            {
                cmd = new System.Data.SqlClient.SqlCommand(sql);
                cmd.Connection = connection;
                Console.WriteLine(sql);
                Console.WriteLine(cmd.ExecuteNonQuery().ToString());
            }
        }

【问题讨论】:

  • 使用执行而不是执行非查询
  • executenonquery 返回一个整数 The number of rows affected.
  • ExecuteNonQuery 返回受影响记录的数量,而不是返回某些内容的查询的结果。因此使用ExecuteScalar

标签: c# command output capture executenonquery


【解决方案1】:

如果我理解正确,我认为您的意思是检索来自发出 sql 命令的“信息性消息”。我没有尝试过,但我认为“打印语句”结果的处理方式相同。在这种情况下,您需要将信息事件处理程序添加到您的 sql 连接对象。

请参阅this article,其中解释了如何执行此操作。

很简单(sn-p 来自 aticle)

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}

【讨论】:

  • 我有多个 sql 命令要执行,所以我想要一个带有 sql 命令的日志文件,然后执行它的输出。 eg: sql 命令#1.. 输出#1...... sql 命令#2.. 输出#2
【解决方案2】:

ExecuteNonQuery 根据受影响的行数返回一个int,用于UPDATEDELETEINSERT

查看 MSDN 文档

SqlCommand.ExecuteNonQuery Method

你想要ExecuteScalar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 2017-03-08
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多