gpt4 book ai didi

c# - 如何连接到 SDF 数据库?我尝试的连接字符串似乎没有用

转载 作者:太空狗 更新时间:2023-10-29 20:22:01 25 4
gpt4 key购买 nike

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

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

错误通常是这样的,这取决于我尝试的字符串:

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

我查阅了许多在线示例和资源,但似乎没有一个有效。我希望这里有人可以指出失败的原因。

这是我的最新形式的 app.config:

<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>

这是我的表单代码:

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


}
}

最佳答案

试试这个...

首先:

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

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 文件数据加载到数据表中并使用 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();
}

问候

关于c# - 如何连接到 SDF 数据库?我尝试的连接字符串似乎没有用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com