gpt4 book ai didi

c# - System.Data.sqlClient 只会在服务器上创建默认数据库

转载 作者:行者123 更新时间:2023-11-30 15:02:22 25 4
gpt4 key购买 nike

背景:

我正在使用 sql 语句在服务器上创建一个临时数据库,该数据库将存储数据直到我的客户端程序进一步需要它。

问题:

我创建数据库的 sql 语句在通过 Sql Management studio 运行时正常工作并创建具有所有必需规范的数据库,另一方面,当我的程序执行该语句时它只创建一个具有“默认”设置的数据库,除了的名字。

问题:

  1. 这是为什么?
  2. 如何让它根据我的规范创建数据库

SQL语句:

CREATE DATABASE Temp ON PRIMARY( NAME = Temp , FILENAME = 'C:\Temp.mdf' , SIZE = 2MB , FILEGROWTH = 10%) LOG ON ( NAME = Temp_Log , FILENAME = 'C:\Temp.ldf' , SIZE = 1MB, MAXSIZE = 70MB , FILEGROWTH = 10%)

代码:

public void AcuConvert()
{
using (DestD)
{
SqlCommand command = new SqlCommand();
DestD.Open();
command.Connection = DestD;
foreach (var item in Entity.SqlDestinationQueries.ToList())
{
command.CommandText = item.Query;
command.ExecuteNonQuery(); //This is where the command is run
}
foreach (var item in Entity.SystemQueries.ToList())
{
command.CommandText = item.Query.Replace("@Sys", SysD.Database);
command.ExecuteNonQuery();
}
foreach (var item in Entity.InsertQueries.ToList())
{
command.CommandText = item.Query.Replace("@Source", SourceD.Database); ;
command.ExecuteNonQuery();
}

}
}

最佳答案

您是否尝试过使用 SQL Server Management Objects而不是原始 SQL 语句?

例如:

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

...

// Connect to the default instance
Server server = new Server();
// Establish new database details
Database database = new Database(server, "MyTempDB");
// Add primary filegroup details
database.FileGroups.Add(new FileGroup(database, "PRIMARY"));

// Set Primary datafile properties
DataFile primaryFile = new DataFile(database.FileGroups["PRIMARY"],
"MyTempDB_Data", "C:\\MyTempDB.mdf");
primaryFile.Size = 2048; // Sizes are in KB
primaryFile.GrowthType = FileGrowthType.Percent;
primaryFile.Growth = 10;
// Add to the Primary filegroup
database.FileGroups["PRIMARY"].Files.Add(primaryFile);

// Define the log file
LogFile logfile = new LogFile(database, "MyTempDB_Log", "C:\\MyTempDB_Log.ldf");
logfile.Size = 1024;
logfile.GrowthType = FileGrowthType.Percent;
logfile.Growth = 10;
logfile.MaxSize = 70 * 1024;
// Add to the database
database.LogFiles.Add(logfile);

// Create
database.Create();
database.Refresh();

当然,您也可以使用特定凭据连接到服务器:

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.aspx

但是,如果您坚持使用文本脚本来创建数据库,我会确保您的初始目录在您的连接字符串中设置正确(即设置为“master”)并且您的用户具有必要的权限 -创建数据库/创建任何数据库/更改数据库。如果这仍然不能给您带来任何乐趣,请尝试剥离其余的 C# 代码并独立于其他语句运行 create SQL - 可能是前面的查询产生了副作用。使用 Profiler以便在您将它们重新添加时准确查看正在运行的内容。

编辑:

我通过一个使用 SqlClient 的小型 C# 程序针对本地 SQL Server 实例 (2012 SqlLocalDB) 测试了您的脚本,在将文件路径更改为我具有写入权限的路径后它运行良好(默认情况下 C 的根目录受到保护) .唯一的其他修改是主要大小必须从 3MB 或更多开始。无法创建任何较小的默认表。这可能是您探索的另一种调查途径。

关于c# - System.Data.sqlClient 只会在服务器上创建默认数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com