【问题标题】:Script run result using SMO for SQL Server使用 SMO for SQL Server 的脚本运行结果
【发布时间】:2015-01-12 22:51:21
【问题描述】:

我正在使用 SMO

我很难捕获结果(可能是语法错误消息或带有数据的结果集),就像我们在 SQL Server Management Studio 中获得的一样。我尝试了几个在互联网上找到的示例,但无法使其按我的意愿工作。

我尝试了以下两种语法

//I am trying catch errors here
int[] results = DBServer.ConnectionContext.ExecuteReader("select * from SomeNonExistingTable");


//I am trying to catch result sets as dataset here
//But I cannot implicitly convert to dataset here using C#
DataSet ds = databaseServer.ConnectionContext.ExecuteWithResults("Select * from mytable"); 

我试图从以下网站获得一些想法:

SMO ConnectionContext.StatementTimeout setting is ignored

C# SMO Select from Database

Using SMO, still no go... ConnectionContext.ExecuteNonQuery(script) can't understand "GO"

【问题讨论】:

  • 您遇到了什么错误?具体来说,第二个应该可以工作; ExecuteWithResults 返回一个 DataSet 对象。
  • 如果我将 ds 声明为 var,并检查 ds 的值,那么我可以看到它正在返回数据集,但我无法将该结果转换为数据集或隐式转换。请参阅下面的代码 var ds = databaseServer.ConnectionContext.ExecuteWithResults("Select * from mytable");

标签: sql-server smo


【解决方案1】:

您可以输入trycatch

try {
        DBServer.ConnectionContext.ExecuteReader("select * from SomeNonExistingTable");
}
catch(Exception ex) {
    while(ex.InnerException) {
        err = ex.InnerException;
        Console.WriteLine(err);
    }
}

【讨论】:

    【解决方案2】:

    在 C# 控制台应用程序中,这是一个工作示例:

    var server = new Server(@"YourServer");
            server.ConnectionContext.DatabaseName = "YourDatabase";
    
            try
            {
                var result = server.ConnectionContext.ExecuteReader("SELECT * FROM YourTable");
    
                while (result.Read())
                {
                    Console.WriteLine(result["ValidColumn"]);
                }
    
            }
            catch (Exception ex)
            {
                // error handling
                Console.WriteLine(ex);
            }
    
            try
            {
                var result = server.ConnectionContext.ExecuteWithResults("SELECT * FROM YourTable");
    
                var i = 0;
                while (i < result.Tables[0].Rows.Count)
                {
                    var dr = result.Tables[0].Rows[i];
                    Console.WriteLine(dr["ValidColumn"]);
                    i++;
                }
            }
            catch (Exception ex)
            {
                // error handling
                Console.WriteLine(ex);
            }
    
            Console.ReadLine();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多