visual studio setup servicio obtener instalador incluir hacer generar ejecutable datos crear conexion con como cadena app c# visual-studio-2010 sql-server-ce connection-string

c# - studio - ¿Cómo puedo conectarme a una base de datos SDF? Ninguna cadena de conexión que intento parece funcionar



incluir base de datos en instalador c# (3)

Creo que el problema que está viendo es que está tratando de usar una SqlConnection para conectarse a una base de datos SQL Compact. .sdf es una base de datos compacta y debe usar SqlCeConnection para conectarse a ella. Usted crea la conexión usando esto pero luego no lo usa. En su lugar, pasa la cadena de conexión al objeto SqlBulkCopy que implícitamente crea una SqlConnection a partir de esa cadena. Supongo que está en esa línea donde está obteniendo el error. Si observa que el espacio de nombre de SqlBulkCopy es System.Data.SqlClient. La razón por la que está viendo el error es que trata de pasar por el servidor SQL para hacer la conexión y no puede resolver su cadena de conexión a una base de datos de SQL Server. Desafortunadamente, no creo que System.Data.SqlServerCe tenga el equivalente a SqlBulkCopy. Limítese a usar clases en System.Data.SqlServerCe y las cosas deberían funcionar como se esperaba. Simplemente tendrá que hacer el procesamiento de una manera más manual.

Intenté literalmente más de 50 intentos diferentes en mi cadena de conexión para mi base de datos local y nada parece funcionar. Básicamente, estoy tratando de abrir una conexión con el archivo de la base de datos para poder volcar los datos que saqué de mi hoja de cálculo de Excel. Estoy usando Visual C # para hacer una aplicación winform sin conexión.

No importa qué cadena de conexión intente en mi app.config, siempre falla cuando intenta escribir "dReader" en la base de datos.

El error suele ser esto dependiendo de qué cadena intente:

"Se produjo un error relacionado con la red o específico de la instancia al establecer una conexión con SQL Server. No se encontró el servidor o no se pudo acceder. Verifique que el nombre de la instancia sea correcto y que SQL Server esté configurado para permitir conexiones remotas. Proveedor de canalizaciones con nombre, error: 40 - No se pudo abrir una conexión a SQL Server) "

He revisado muchos ejemplos y recursos en línea y ninguno parece funcionar. Espero que alguien aquí pueda señalar por qué está fallando.

Aquí está mi app.config en su última forma:

<connectionStrings> <add name="DDP_Project.Properties.Settings.DDP_DatabaseConnectionString" connectionString="Data Source=E:/Other DDP Projects/DDP_Project_SDF/DDP_Project/DDP_Database.sdf;" providerName="Microsoft.SqlServerCe.Client.3.5" /> </connectionStrings>

Aquí está mi código de formulario:

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) { } }

}


De acuerdo con esta publicación, SqlBulkCopy no es compatible con SqlCe.


Prueba esto...

Primero:

Cree primero un método de prueba que puede verificar si puede conectarse a 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(); } } }

Segundo:

Simplemente cargue los datos de su archivo Excel en una tabla de datos y use foreach y guárdelo en su archivo de base de datos ce sql.

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

Saludos