2

c#Windowsフォームアプリケーションの前提条件としてSQL Server Express 2005をインストールしています。インストーラークラスのカスタムアクションの下で、以下のスクリプトを実行して、ユーザーマシンにデータベースを作成しようとしています。

ただし、C:\ドライブ(Windowsルートフォルダー)にデータベースを作成することを選択すると、次のエラー/例外が発生します。

Operating system error 5(access is denied)

他のドライブで行おうとしてもエラーは発生しません。

私を助けてください。このSQLクエリに関連する特権を取得するにはどうすればよいですか?

USE [master]
GO
/****** Object:  Database [Society_security_database]    Script Date: 08/11/2012 14:26:23 ******/
CREATE DATABASE [Society_security_database] ON  PRIMARY 
( NAME = N'Society_security_database', FILENAME = N'C:\Society_security_database.mdf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'Society_security_database_log', FILENAME = N'C:\Society_security_database.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 COLLATE SQL_Latin1_General_CP1_CI_AS
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'Society_security_database', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Society_security_database].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [Society_security_database] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [Society_security_database] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [Society_security_database] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [Society_security_database] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [Society_security_database] SET ARITHABORT OFF 
GO
ALTER DATABASE [Society_security_database] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [Society_security_database] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [Society_security_database] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [Society_security_database] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [Society_security_database] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [Society_security_database] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [Society_security_database] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [Society_security_database] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [Society_security_database] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [Society_security_database] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [Society_security_database] SET  ENABLE_BROKER 
GO
ALTER DATABASE [Society_security_database] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [Society_security_database] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [Society_security_database] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [Society_security_database] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [Society_security_database] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [Society_security_database] SET  READ_WRITE 
GO
ALTER DATABASE [Society_security_database] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [Society_security_database] SET  MULTI_USER 
GO
ALTER DATABASE [Society_security_database] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [Society_security_database] SET DB_CHAINING OFF 
4

2 に答える 2

4

私はネットワークサービスアカウントからのようにデータベースからアクセスしようとしていたので、最終的に解決策に到達しました。それをローカルシステムに変更したとき、それは機能しました!これがコードです

Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer mc = new Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer();
                Microsoft.SqlServer.Management.Smo.Wmi.Service svc = mc.Services["MSSQL$SQLEXPRESS"];
                svc.SetServiceAccount("LocalSystem",null);
                svc.Alter();
                SqlConnection.ClearAllPools();

サービスアカウントをlocalSystemに変更します

于 2012-09-06T09:14:41.053 に答える
0

私も同様の問題を抱えていました。地獄の多くの分析の後、私は自分の問題の簡単な修正を考え出しました。VisualStudioを閉じます。管理者として再度開くと、これで機能するはずです。

それが役に立てば幸い。

于 2013-06-18T19:06:48.580 に答える