如何连接SDF数据库? 我试过没有连接字符串似乎工作

我已尝试在我的本地数据库的连接字符串上进行50多次不同的尝试,似乎没有任何效果。 我本质上只是试图打开数据库文件的连接,所以我可以转储我从excel电子表格中提取的数据。 我正在使用Visual C#制作离线winform应用程序。

无论我在app.config中尝试什么连接字符串,它总是在尝试将“dReader”写入数据库时​​失败。

错误通常取决于我尝试的字符串:

“建立与SQL Server的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。validation实例名称是否正确以及SQL Server是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 – 无法打开与SQL Server的连接)“

我已经浏览了许多在线示例和资源,似乎没有任何工作。 我希望这里有人可以指出为什么会失败。

这是我最新forms的app.config:

   

这是我的表单代码:

  private void Profiles_Click(object sender, EventArgs e) { profilesDialog.FileName = "[YOUR_UPLOAD_FILE_HERE]"; var result = profilesDialog.ShowDialog(); if (result == DialogResult.OK) { HandleFileSelection(); } } private void HandleFileSelection() { var file = profilesDialog.FileName; // Create a connection to the file datafile.sdf in the program folder string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\DDP_Database.sdf"; SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile); string strConnection = ConfigurationManager.ConnectionStrings["DDP_Project.Properties.Settings.DDP_DatabaseConnectionString"].ConnectionString; //Create connection string to Excel work book string excelConnectionString = string.Format( @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=""{0}""; Extended Properties=""Excel 8.0;HDR=YES;""", file ); //Create Connection to Excel work book OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); OleDbCommand cmd = new OleDbCommand("SELECT [ID],[STATUS],[FAN_NUM],[PROFILE_NAME],[DESTINATION_HOST],[USER_ID],[USER_PASSWORD],[PROTOCOL],[PORT],[PATH],[CONTACT_NAME],[CONTACT_EMAIL],[CONTACT_PHONE],[CONTACT_ALT_PHONE],[CONTACT_CITY],[CONTACT_STATE],[CONTACT_CONTACT_TIME] FROM [Sheet1$]", excelConnection); excelConnection.Open(); OleDbDataReader dReader; dReader = cmd.ExecuteReader(); SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection); sqlBulk.DestinationTableName = "Profiles"; sqlBulk.ColumnMappings.Add("ID", "ID"); sqlBulk.ColumnMappings.Add("STATUS", "STATUS"); sqlBulk.ColumnMappings.Add("FAN_NUM", "FAN_NUM"); sqlBulk.ColumnMappings.Add("PROFILE_NAME", "PROFILE_NAME"); sqlBulk.ColumnMappings.Add("DESTINATION_HOST", "DESTINATION_HOST"); sqlBulk.ColumnMappings.Add("USER_ID", "USER_ID"); sqlBulk.ColumnMappings.Add("USER_PASSWORD", "USER_PASSWORD"); sqlBulk.ColumnMappings.Add("PROTOCOL", "PROTOCOL"); sqlBulk.ColumnMappings.Add("PORT", "PORT"); sqlBulk.ColumnMappings.Add("PATH", "PATH"); sqlBulk.ColumnMappings.Add("CONTACT_NAME", "CONTACT_NAME"); sqlBulk.ColumnMappings.Add("CONTACT_EMAIL", "CONTACT_EMAIL"); sqlBulk.ColumnMappings.Add("CONTACT_PHONE", "CONTACT_PHONE"); sqlBulk.ColumnMappings.Add("CONTACT_ALT_PHONE", "CONTACT_ALT_PHONE"); sqlBulk.ColumnMappings.Add("CONTACT_CITY", "CONTACT_CITY"); sqlBulk.ColumnMappings.Add("CONTACT_STATE", "CONTACT_STATE"); sqlBulk.ColumnMappings.Add("CONTACT_CONTACT_TIME", "CONTACT_CONTACT_TIME"); sqlBulk.WriteToServer(dReader); sqlBulk.Close(); excelConnection.Close(); } private void profilesDialog_FileOk(object sender, EventArgs e) { } } 

}

试试这个…

第一:

首先创建一个测试方法,您可以检查是否可以连接到sqlcedatabase。

 private void testconnection() { string strConnection = ConfigurationManager.ConnectionStrings["DDP_Project.Properties.Settings.DDP_DatabaseConnectionString"].ConnectionString; using (var conn = new SqlCeConnection(string.Format("Data Source={0};Max Database Size=4091;Max Buffer Size = 1024;Default Lock Escalation =100;", strConnection))) { conn.Open(); try { //your Stuff } catch (SqlCeException) { throw; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } } 

第二:

只需将excel文件数据加载到Datatable中,然后使用foreach将其保存在sql ce数据库文件中。

 //Something like //oledbcon //oledb dataadapter //datatable // dapt.Fill(dt); foreach(DataRow excel in dt.Rows) { ceCmd.Parameters.AddWithValue("ID",excel["ID"]); ceCmd.ExecuteNonQuery(); } 

问候

我认为您遇到的问题是您正在尝试使用SqlConnection连接到SQL Compact数据库。 .sdf是一个紧凑的数据库,您必须使用SqlCeConnection连接它。 您使用此方法创建连接,但之后您不使用它。 而是将连接字符串传递给SqlBulkCopy对象,该对象从该字符串隐式创建SqlConnection。 我假设它在那条线上,你得到错误。 如果您注意到SqlBulkCopy的名称空间是System.Data.SqlClient。 您看到错误的原因是它尝试通过SQL Server建立连接并且无法将连接字符串解析为SQL Server数据库。 不幸的是,我不认为System.Data.SqlServerCe具有与SqlBulkCopy等效的function。 坚持使用System.Data.SqlServerCe中的类,事情应该按预期工作。 您只需要以更手动的方式进行处理。

根据这篇文章,SqlCe不支持SqlBulkCopy。