SQL Server 2000DBAVisual Studio 2005Windows 2000Windows XP.NET 2.0Windows FormsC# 2.0中级开发Visual StudioSQL ServerWindows.NETC#
使用 .NET 2.0 生成插入脚本






4.62/5 (4投票s)
使用 .NET 2.0 获取 SQL Server 架构并生成插入语句。
引言
最近,我需要修改 SQL Server 中的一些数据并将它们插入到其他数据库中。方法是从源数据库获取数据,在网格中修改它们,并从网格生成 Insert
语句以供以后使用。
背景
.NET 2.0 中获取 SQL Server 架构的功能非常有用且易于使用。如果您能获取架构,生成脚本的任务将变得非常容易。
使用代码
以下是如何获取 SQL Server 实例
DataTable table = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();
DataView view = new DataView(table, string.Empty,
"ServerName", DataViewRowState.Added);
cbx_ServerList.DataSource = view;
cbx_ServerList.DisplayMember = "ServerName";
要获取 SQL Server 数据库列表
DataTable table = conn.GetSchema(SqlClientMetaDataCollectionNames.Databases);
cbx_DatabaseList.DataSource = table;
cbx_DatabaseList.DisplayMember = "database_name";
要获取表列表
DataTable table = conn.GetSchema(SqlClientMetaDataCollectionNames.Tables,
new string[] { null, null, null, "BASE TABLE" });
cbx_TableList.DataSource = table;
cbx_TableList.DisplayMember = "TABLE_NAME";
要获取视图列表
DataTable table = conn.GetSchema(SqlClientMetaDataCollectionNames.Tables,
new string[] { null, null, null, "VIEW" });
cbx_ViewList.DataSource = table;
cbx_ViewList.DisplayMember = "TABLE_NAME";
要获取列列表(忽略了一些类型,因为我实际上不需要导出这些类型;而且,将图像导出到文本文件看起来很奇怪,对吧?)
private const string FILTER_COLUMN_TYPE =
"data_type NOT IN ('uniqueidentifier', 'timestamp', 'image')";
DataTable columnsTable = conn.GetSchema(SqlClientMetaDataCollectionNames.Columns,
new string[] { null, null, tableName });
DataView columnsView = new DataView(columnsTable, FILTER_COLUMN_TYPE,
"ordinal_position", DataViewRowState.Added);
脚本生成
private static string GenerateDataRowInsertSQLScript(string SQLTableName,
DataRow row, ArrayList includedColumnNames)
{
StringBuilder builder = new StringBuilder();
builder.Append(" INSERT INTO [").Append(SQLTableName).Append("] ( ");
for (int cnt = 0; cnt < includedColumnNames.Count; cnt++)
{
if (cnt != 0)
builder.Append(", ");
builder.Append("[").Append(includedColumnNames[cnt].ToString()).Append("]");
}
builder.Append(" ) ").Append(Environment.NewLine);
builder.Append(" VALUES ( ");
for (int cnt = 0; cnt < includedColumnNames.Count; cnt++)
{
if (cnt != 0)
builder.Append(", ");
string columnName = includedColumnNames[cnt].ToString();
builder.Append(SqlHelper.ToSQLString(row[columnName],
row.Table.Columns[columnName].DataType));
}
builder.Append(" ) ").Append(Environment.NewLine).Append(Environment.NewLine);
return builder.ToString();
}
演示
输入连接详细信息,并选择相应的表。
“选择脚本”按钮将生成一个 SELECT
语句;这只是为了方便。您也可以在之后添加一个 WHERE
子句。
按下“执行”按钮,您将在网格中获得结果数据集。
您可以根据需要修改数据。通过选择列,如果您愿意,可以在网格中执行重新排序或替换功能。
按下“预览”按钮以获取插入脚本。
结论
这只是一个简单的项目,向您展示了如何使用 .NET 2.0 从 SQL Server 获取架构。
请注意,由于我没有捕获您在“选择脚本”框中输入的内容,并且仅通过查看返回的数据集,我不知道表名是什么,因此在生成插入脚本之前,您需要选择正确的表名。