在visual studio中创建SQL数据库时出错

本文关键字:数据库 出错 SQL 创建 visual studio | 更新日期: 2023-09-27 18:26:19

我正试图在C#中用程序创建一个可以创建自己的数据库。我正在visual studio中使用一个windows窗体应用程序作为基础。

使用此代码时的问题是它总是返回false。你看到这段代码中有任何可能导致问题的错误吗?

 public static String DB_NAME = "database name";
 public static string DB_PATH = "database path"; //this path does not have " " in the string.
 public bool CreateDatabase()
    {
        bool stat = true;
        string sqlCreateDBQuery;
        SqlConnection myConn = new SqlConnection("Server=localhost''(localdb)''v11.0;Integrated security=SSPI;database=master;");
        sqlCreateDBQuery = " CREATE DATABASE "
                            + DB_NAME
                            + " ON PRIMARY "
                            + " (NAME = " + DB_NAME + "_Data, "
                            + " FILENAME = '" + DB_PATH + DB_NAME + ".mdf', "
                            + " LOG ON (NAME =" + DB_NAME + "_Log, "
                            + " FILENAME = '" + DB_PATH + DB_NAME + "Log.ldf', ";
        SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, myConn);
        try
        {
            myConn.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (System.Exception e)
        {
            Debug.WriteLine(e.ToString());
            stat =  false;
        }
        finally
        {
            if (myConn.State == ConnectionState.Open)
            {
                myConn.Close();
            }
            myConn.Dispose();
        }
        return stat;
    }

编辑:阅读评论,我已经改变了代码一点没有吞下异常。

得到异常的结果是:

 System.Data.SqlClient.SqlException (0x80131904): Error related with the network or specific from the instance  while the server established a connection with the SQL Server. The server was not found or not is not accesible. Check that the name of the instance is correct and the SQL server is configured to admit remote conections. (provider: SQL Network Interfaces, error: 26 - Error searching for server o specified instance)
   in System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   in System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   in System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover)
   in System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
   in System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
   in System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
   in System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData)
   in System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   in System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   in System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   in System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   in System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   in System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   in System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   in System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   in System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   in System.Data.SqlClient.SqlConnection.Open()
   in Contabilidad.Form1.CreateDatabase() en c:'*****'Form1.cs:línea 46
ClientConnectionId:00000000-0000-0000-0000-000000000000

在visual studio中创建SQL数据库时出错

感谢VDohnal发布的链接,我找到了解决方案。

如链接中所述,首先需要检查.NET Framework版本(该版本可以按照此链接的说明进行检查http://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx).

我的代码中的一个问题是文件路径的定义。ExecuteQuerycommand()无法正确执行查询,因为它无法正确读取路径(执行此操作的好版本是代码)。

Finnaly阅读了user3514987的评论,((localdb)''v11.0)是我安装的本地数据库,如果你安装了express版本,请小心,SQL express(SQLEXPRESS)你必须更改部分代码(特别是myConn)才能使其工作。

    // your db name
    static string dbName = "myDbName";
    // path to your db files:
    // ensure that the directory exists and you have read write permission.
    string[] files = { Path.Combine(Application.StartupPath, dbName + ".mdf"), 
               Path.Combine(Application.StartupPath, dbName + ".ldf") };
public bool CreateDatabase()
    {
        bool stat = true;
        string sqlCreateDBQuery;
        SqlConnection myConn = new SqlConnection("Server=(localdb)''v11.0;Integrated Security=true;");

        var query = "CREATE DATABASE " + dbName +
            " ON PRIMARY" +
            " (NAME = " + dbName + "_data," +
            " FILENAME = '" + files[0] + "'," +
            " SIZE = 10MB," +
            " MAXSIZE = 100MB," +
            " FILEGROWTH = 10%)" +
            " LOG ON" +
            " (NAME = " + dbName + "_log," +
            " FILENAME = '" + files[1] + "'," +
            " SIZE = 1MB," +
            " MAXSIZE = 5MB," +
            " FILEGROWTH = 10%)" +
            ";";
        SqlCommand myCommand = new SqlCommand(query, myConn);
        try
        {
            myConn.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (System.Exception e)
        {
            Debug.WriteLine(e.ToString());
            stat =  false;
        }
        finally
        {
            if (myConn.State == ConnectionState.Open)
            {
                myConn.Close();
            }
            myConn.Dispose();
        }
        return stat;
    }