- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到了this了解如何使用 GO 语句执行 SQL 脚本的教程。
现在我想知道我可以得到消息 TAB 的输出。
使用几个 GO 语句,输出将如下所示:
1 行受影响
912 行受影响
...
但是 server.ConnectionContext.ExecuteNonQuery() 只能返回一个 int,而我需要所有文本。如果查询的某些部分出现错误,它也应该将其放在输出中。
任何帮助,将不胜感激。
最佳答案
最简单的方法可能是打印您返回的 ExecuteNonQuery
的号码。 :
int rowsAffected = server.ConnectionContext.ExecuteNonQuery(/* ... */);
if (rowsAffected != -1)
{
Console.WriteLine("{0} rows affected.", rowsAffected);
}
SET NOCOUNT
当前 session /范围的设置。
ServerConnection.ExecuteNonQuery()
方法,但创建一个
SqlCommand
对象通过访问底层
SqlConnection
目的。在那订阅
StatementCompleted
事件。
using (SqlCommand command = server.ConnectionContext.SqlConnectionObject.CreateCommand())
{
// Set other properties for "command", like StatementText, etc.
command.StatementCompleted += (s, e) => {
Console.WriteLine("{0} row(s) affected.", e.RecordCount);
};
command.ExecuteNonQuery();
}
StatementCompleted
(相反,手动打印
ExecuteNonQuery()
返回的值)的好处是它的工作方式与 SSMS 或 SQLCMD.EXE 完全一样:
SET NOCOUNT ON
已设置,它根本不会被调用。 SET NOCOUNT OFF
已设置,它将为批处理中的每个语句调用。 StatementCompleted
正是 TDS 协议(protocol)在提及
DONE_IN_PROC
事件时所谈论的内容;请参阅 MSDN 上的 SET NOCOUNT 命令的
Remarks。)
GO
处的输入脚本/语句。分隔符,因为你又回到了使用
SqlCommand.Execute*()
它不能一次处理多个批处理。为此,有多种选择:
GO
开头的行上手动拆分输入(警告:GO
可以像 GO 5
一样调用,例如,执行前一批 5 次)。 ManagedBatchParser
的好处(也可能是负担)也就是说,它还将为您解析 T-SQL 脚本的所有其他构造(用于
SQLCMD.EXE
)。其中:
:setvar
,
:connect
,
:quit
等。您不必实现相应的
ICommandExecutor
成员,当然,如果您的脚本不使用它们。但请注意,您可能无法执行“任意”脚本。
IBatchSource
的好的文档或示例,这是我一起去的。
internal abstract class BatchSource : IBatchSource
{
private string m_content;
public void Populate()
{
m_content = GetContent();
}
public void Reset()
{
m_content = null;
}
protected abstract string GetContent();
public ParserAction GetMoreData(ref string str)
{
str = null;
if (m_content != null)
{
str = m_content;
m_content = null;
}
return ParserAction.Continue;
}
}
internal class FileBatchSource : BatchSource
{
private readonly string m_fileName;
public FileBatchSource(string fileName)
{
m_fileName = fileName;
}
protected override string GetContent()
{
return File.ReadAllText(m_fileName);
}
}
internal class StatementBatchSource : BatchSource
{
private readonly string m_statement;
public StatementBatchSource(string statement)
{
m_statement = statement;
}
protected override string GetContent()
{
return m_statement;
}
}
var source = new StatementBatchSource("SELECT GETUTCDATE()");
source.Populate();
var parser = new Parser();
parser.SetBatchSource(source);
/* other parser.Set*() calls */
parser.Parse();
StatementBatchSource
)还是文件(
FileBatchSource
)的两种实现都存在一次读取完整文本的问题
INSERT
陈述。尽管我不认为这是一个实际问题,
SQLCMD.EXE
可以处理它。但对于我的一生,我无法弄清楚到底是怎么回事,
IBatchParser.GetContent()
返回的 block 所以这样
关于c# - SSMS SMO 对象 : Get query results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154291/
我正在尝试使用 SMO 通过 Powershell 恢复数据库,但是当我尝试定义和使用服务器对象时,出现以下错误: Cannot convert argument "srv", with value:
我已经阅读了十几个不同的博客,并通读了 msdn 示例,但它们对我不起作用。 最终我想做的是自动将数据库从我们的生产实例移动到我们的开发实例,或其他方向。 我采取的方法是: 备份/恢复到临时数据库 分
我使用这个 SMO 来恢复备份: Server myServer = new Server(@"PC-1\Instance1"); Restore restoreDB
我已经编写了一个 C# 代码来使用 SMO 在两个远程服务器之间传输表,我想知道的是无论如何都可以检查目标服务器中是否已经存在具有确切模式、列名、数据类型的表,约束和一切。这样我就不必每次都删除现有表
我正在考虑使用 C# SMO 库以编程方式创建当前数据库结构(不含数据)的副本。我已经成功地移动了模式、表、存储过程和外部资源,但是我很难这样做。我正在考虑使用这样提供的表对象: TableColle
我在 C# 中使用 SMO 从数据库生成整个模式的脚本。 这是我使用的代码: // Instanciando Server srv = new Server(con); // Refere
我正在做一个使用 smo 对象(服务器、数据库)的 C# 项目。 我包括了 using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlS
我有一个集成测试,它创建了一个 Microsoft.SqlServer.Management.Smo.Database 类型的数据库: var defaultConnectionConnectionS
我使用 SQL Server SMO 将 .bak 恢复到新数据库,但没有成功。 sql server是2012,smo object版本来自最新的sdk version 11.0 文件 .bak 是
我正在向数据库中插入大量行并尝试在其上建立主键。如果我创建表并立即建立一个键,即使使用 SQLBulkCopy 命令,插入数据也需要 10 倍的时间。所以这不是一个可行的选择。我现在要做的是插入数据,
WEKA 的 SMO 与 LIBSVM 不同吗? 我问是因为它在 LIBSVM 的 site 上说那:it implements an SMO-type algorithm proposed in t
我使用 vb.net 备份 sql '05 - '08 数据库。它在较小的数据库上效果很好。但当涉及大型数据库时,它会在 30% 或 40% 时失败并出现错误:备份或恢复已中止。 Di
我在尝试恢复 SQL Server 2008 R2 数据库时遇到错误: Restore failed for Server 'KIMO-PC'. 使用的代码: Server myServer
我使用 SQL Server 已经有几年了。我听说过SMO,但我对此一无所知。使用它有什么好处?我应该在我的 SQL Server 项目(主要是数据仓库开发)中学习并开始使用 SMO 吗?为什么? 最
如何与 SMO 服务器连接共享交易?共享连接就这么简单 var connection = new SqlConnection(); var serverConnection = new ServerC
如何使用 SMO 重命名物理 .mdf .ndf .ldf 文件。 This这篇文章很有帮助,但我需要使用 C# SMO 对象。 使用 SMO 服务器对象,我可以检索数据库,然后获取对数据文件对象的访
我有一个系统可以在两个具有相同模式的数据库之间传输数据(用于开发目的)。 SMO dependency walker 除了触发器外工作得很好。如果我得到一个依赖项列表,我不关心触发器是否引入了对另一个
我能够使用 SMO 构建类似于 SSMS 中的“查找备份文件”对话框的 TreeView 。我可以列出服务器上的文件夹,如果有备份设备,它们也会被列出。我似乎无法复制的一件事是如何浏览备份文件以恢复最
我已将 Microsoft.SqlServer.Management.Smo.dll 引用添加到我的项目中,但它仍然给我以下错误。引用的dll在C:\Program Files\Microsoft S
我是 Weka 的新手。我想在 WEKA 中使用顺序最小优化。谁能告诉我如何继续?这是我的 Java 代码,但它不起作用: public class SVMTest { public void tes
我是一名优秀的程序员,十分优秀!