日期:2014-05-18  浏览次数:20671 次

代码create database时出现了操作系统错误,求改错的方法
如题。

我用代码创建数据库,局部代码如下:

C# code

string connString = @"server=.\sqlexpress;user id=sa;password=123";

SqlConnection myConn = new SqlConnection(connString);

string str = "CREATE DATABASE MyDatabase ON PRIMARY " + "(NAME = MyDatabase_Data, " + "FILENAME ='"+ Application.ExecutablePath+ "\\MyDatabaseData.mdf'," + "SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " + "LOG ON (NAME = MyDatabase_Log, " + "FILENAME ='"+ Application.ExecutablePath+ "\\MyDatabaseLog.ldf'," + "SIZE = 1MB, " + "MAXSIZE = 5MB, " + "FILEGROWTH = 10%)";
            SqlCommand myCommand = new SqlCommand(str, myConn);
            try
            {
                myConn.Open();
                myCommand.ExecuteNonQuery();



建库的时候定义创建的mdf文件的目录,为应用程序当前所在目录(请见上方代码)

但是运行时出现下方的错误:

C# code

System.Data.SqlClient.SqlException: 对文件 "C:\Documents and Settings\Tansion\桌面 
\create database\WindowsFormsApplication1\WindowsFormsApplication1

\bin\Debug\WindowsFormsApplication1.EXE\MyDatabaseData.mdf" 的目录查找失败,出现操作系统错误  123(文件名、目录名或卷标语法不正确。)。
CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。
   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean 

breakConnection)
   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean 

breakConnection)
   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject 

stateObj)
   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, 

SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject 

stateObj)
   在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean 

async)
   在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String 

methodName, Boolean sendToPipe)
   在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   在 WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) 位置 

C:\Documents and Settings\Tansion\桌面\create database\WindowsFormsApplication1

\WindowsFormsApplication1\Form1.cs:行号 55



其中,行号55 是指
C# code

myCommand.ExecuteNonQuery();



不知是哪里出错了,请大家指教!




------解决方案--------------------
Application.ExecutablePath

替换为:

Application.StartupPath

Application.ExecutablePath包含了你的应用程序名称,所以建立MDF时认为把应用程序当目录用了,肯定是会报错的

------解决方案--------------------
看你这里 WindowsFormsApplication1.EXE\MyDatabaseData.mdf" 的目录查找失败,出现操作系统错误 123(文件名、目录名或卷标语法不正确。)。

WindowsFormsApplication1.EXE 是你自己的程序文件了,不是文件夹,所以下面不可能放 mdf文件了。
解决方法:
Application.ExecutablePath 改成 Application.StartupPath