2011-10-20 50 views
3

所以,我有一个用于连接和插入一条记录到数据库中下面的代码:无法连接到本地数据库在C#

string dbfile = "|DataDirectory|\\Databases\\Database.sdf"; 
      SqlConnection connection = new SqlConnection("Data Source=" + dbfile); 
      SqlCommand query = new SqlCommand("insert into Leggers values('" + leggernummer + "','" + omschrijving + "')", connection); 
      ** connection.Open(); ** 
      query.BeginExecuteNonQuery(); 

      connection.Close(); 

我的配置文件看起来像这样:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 
    <connectionStrings> 
     <add name="connectionstring" 
      connectionString="Data Source=|DataDirectory|\Databases\Database.sdf" 
      providerName="Microsoft.SqlServerCe.Client.3.5" /> 
    </connectionStrings> 
</configuration> 

然后它在第一个代码块中的**和**之间出现错误

错误是:

System.Data.SqlClient.SqlException was unhandled 
    Message=A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) 
    Source=.Net SqlClient Data Provider 
    ErrorCode=-2146232060 
    Class=20 
    LineNumber=0 
    Number=-1 
    Server="" 
    State=0 
    StackTrace: 
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 
     at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity) 
     at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject) 
     at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) 
     at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
     at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
     at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
     at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
     at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
     at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
     at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
     at System.Data.SqlClient.SqlConnection.Open() 
     at Stockbeheer_Savenay.Forms.LeggerToevoegen.addItem(String leggernummer, String omschrijving) in C:\Users\Simon\Desktop\Stockbeheer Savenay\Stockbeheer Savenay\Forms\LeggerToevoegen.cs:line 59 
     at Stockbeheer_Savenay.Forms.LeggerToevoegen.btnToevoegen_Click(Object sender, EventArgs e) in C:\Users\Simon\Desktop\Stockbeheer Savenay\Stockbeheer Savenay\Forms\LeggerToevoegen.cs:line 31 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at Stockbeheer_Savenay.Program.Main() in C:\Users\Simon\Desktop\Stockbeheer Savenay\Stockbeheer Savenay\Classes\Program.cs:line 18 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

我是C#数据库的新手,所以我不确定出了什么问题。试图遵循教程,但他们都说不同的事情,所以很难弄清楚我应该做什么。

谢谢!

+0

你可以连接到数据库通过SQL Server管理Studi Ø?如果是这样,您使用什么信息进行连接,并且一旦连接,您的数据库是否可访问?那个DB的名字是什么?我想我们只需要在这里调试连接字符串...... –

+0

SQLEXPRESS服务实例是否正在运行? – kprobst

+0

@ MerlynMorgan-Graham:我不确定SQL Server Management Studio是什么。我在Visual Studio中创建了数据库,并且在那里进行连接,我测试过了。数据库的名称就是“数据库”。 –

回答

10

当使用.sdf文件(SQL服务器精简版),你需要使用SqlCeConnectionSqlConnection(即针对一个完整的SQL Server的工作原理):也

string dbfile = "|DataDirectory|\\Databases\\Database.sdf"; 

string insertStmt = "insert into Leggers values('" + leggernummer + "','" + omschrijving + "')"; 

using(SqlCeConnection connection = new SqlCeConnection("Data Source=" + dbfile)) 
using(SqlCeCommand query = new SqlCeCommand(insertStmt, connection)) 
{ 
    connection.Open(); 
    query.BeginExecuteNonQuery(); 
    connection.Close(); 
} 

:你应该尝试使用参数化查询,而不只是连接在一起你的SQL语句......(研究“SQL注入攻击”....)

+0

它不能识别SqlCeConnection和SqlCeCommand。我有以下使用指令:using System.Data; using System.Data.SqlClient; using System.Data.OleDb; 此外:该程序是一个离线应用程序,只有1人将使用。所以我没有SQL注入的风险。 –

+0

好的,现在得到了连接。但是,我的数据库没有更新我添加的新记录。 –

+0

或者它只是忽略添加了什么,因为我正在调试? (对不起,三人发帖,到后期编辑) –