Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 脚本选项sql smo不支持脚本数据_C#_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

C# 脚本选项sql smo不支持脚本数据

C# 脚本选项sql smo不支持脚本数据,c#,sql,sql-server,sql-server-2008,C#,Sql,Sql Server,Sql Server 2008,我正在使用c代码生成sql数据库脚本 以下代码适用于create table,但当我尝试使用scriptOptions.ScriptData=true时它正在引发以下异常 类型的未处理异常 出现“Microsoft.SqlServer.Management.Smo.FailedOperationException” 在Microsoft.SqlServer.Smo.dll中 其他信息:此方法不支持脚本数据 代码 对以下各项进行了测试: Win 7.0、.NET 4.0,VS 2010,SQL

我正在使用c代码生成sql数据库脚本

以下代码适用于
create table
,但当我尝试使用
scriptOptions.ScriptData=true时它正在引发以下异常

类型的未处理异常 出现“Microsoft.SqlServer.Management.Smo.FailedOperationException” 在Microsoft.SqlServer.Smo.dll中

其他信息:此方法不支持脚本数据

代码


对以下各项进行了测试:

  • Win 7.0、.NET 4.0,VS 2010,SQL Server 2008R2
  • Win 7.0、.NET 4.6.1,VS 2017,SQL Server 2014
所需的程序集引用:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
我用OK按钮创建了一个简单的Win forms应用程序,并调用了下面的函数

注意:如果要为视图编写脚本,则需要添加

if( myView.IsSystemObject == true ) continue;
确保未编写系统视图脚本;我还没有测试过这个。对于旧版本的SQL Server,您可能还需要对表进行此检查

public static string ScriptDatabase( string dbConnectionString, string databaseName )
{
    SqlConnection conn = new SqlConnection( dbConnectionString );
    ServerConnection serverConn = new ServerConnection( conn );
    var server = new Server( serverConn );
    var database = server.Databases[ databaseName ];

    var scripter = new Scripter( server );
    scripter.Options.IncludeIfNotExists = true;
    scripter.Options.ScriptSchema = true;
    scripter.Options.ScriptData = true;

    string scrs = "";
    foreach( Table myTable in database.Tables )
    {
        foreach( string s in scripter.EnumScript( new Urn[] { myTable.Urn } ) )
            scrs += s + "\n\n"; ;
    }
    return ( scrs );
}
函数将按如下方式调用:

// Connection string for local SQL Server default instance
ScriptDatabase( "Server=.;Database=PlayGround;Trusted_Connection=True;", "PlayGround" );
输出:

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tBlah]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tBlah](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [tID] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [Value] [varchar](20) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]
END

SET IDENTITY_INSERT [dbo].[tBlah] ON 


INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (1, N'2', N'1234')

INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (2, N'2', N'345.6')
MSDN参考资料:


于2019年12月17日更新:检查最新的.NET版本;增加了所需的参考资料;清理示例代码;在每个表上添加了示例conn字符串

请尝试
Scripter.EnumScript(database.Tables)
而不是
Table.Script()
。(免责声明:未经测试。)@JeroenMostert不为我工作可能是我使用了错误的代码,你能在我的代码中帮助我吗。。thanks@Kiquenet-看起来没有办法:
程序集和名称空间?Microsoft.SqlServer.Smo?
不起作用,我在C#中尝试了相同的代码,但它没有给我insert的数据脚本query@HardikMasalawala,我使用最新的.NET重新创建了解决方案,它确实有效。表中有数据吗?谢谢!你救了我!脚本对我来说不起作用,但是这个脚本可以用!
SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tBlah]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tBlah](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [tID] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [Value] [varchar](20) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]
END

SET IDENTITY_INSERT [dbo].[tBlah] ON 


INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (1, N'2', N'1234')

INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (2, N'2', N'345.6')