无法访问数据库(SQL Server CE / Windows Mobile 6.5)
Unable to access database (SQL Server CE / Windows Mobile 6.5)
我正在为 Windows Mobile 6.5 设备创建一个应用程序,其中一部分应该在设备插入时复制 SQL 数据库,以便在拔下时拥有本地副本(因为没有连接)。
所以,为了拥有一个本地数据库,我遵循了 "Northwind" tutorial for SQL Server CE(使用我自己的测试数据库),但不断 运行 进入设备可以的问题' 连接到数据库。我无法调试(因为我每次都必须将程序传输到设备上进行测试)但我收到此错误消息(无论我尝试使用什么连接字符串):
SQL database error: Unspecified error [.\userdb.sdf]
我尝试了多个连接字符串,如果我使用设计器将数据源绑定到表单,我可以看到可以访问数据库。但是我需要手动设置一些查询,因为它们比填写表格要复杂得多。
这是我的代码,它只是用来填写表格,但下一步是 login/password 检查:
public partial class UserLogin : Form
{
private SqlCeConnection _conn;
public UserLogin()
{
InitializeComponent();
_conn = new SqlCeConnection(@"Data Source=.\userdb.sdf;Password=PASSWORD;Persist Security Info=True");
}
private void buttonCancel1_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonLoad1_Click(object sender, EventArgs e)
{
try
{
SqlCeCommand cmd = new SqlCeCommand();
cmd.Connection = _conn;
cmd.CommandText = "SELECT userid, username, password FROM Users";
_conn.Open();
SqlCeResultSet resultSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
this.bindingSource1.DataSource = resultSet;
}
catch (SqlCeException sql_ex)
{
MessageBox.Show("SQL database error: " + sql_ex.Message);
}
}
我还尝试了一些不同的方法,其中表单中填充了来自设计器的数据集,但我仍然无法手动访问数据库:
https://pastebin.com/10P3wGeP
Windows Mobile 既不知道驱动器盘符也不知道 'current' 目录。这就是为什么 "Data Source=.\userdb.sdf" 总是会失败。
在 windows 移动设备上,您始终必须使用完整的限定路径名才能访问文件。
您可以使用
string path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
获取可执行文件启动目录的路径。
我正在为 Windows Mobile 6.5 设备创建一个应用程序,其中一部分应该在设备插入时复制 SQL 数据库,以便在拔下时拥有本地副本(因为没有连接)。
所以,为了拥有一个本地数据库,我遵循了 "Northwind" tutorial for SQL Server CE(使用我自己的测试数据库),但不断 运行 进入设备可以的问题' 连接到数据库。我无法调试(因为我每次都必须将程序传输到设备上进行测试)但我收到此错误消息(无论我尝试使用什么连接字符串):
SQL database error: Unspecified error [.\userdb.sdf]
我尝试了多个连接字符串,如果我使用设计器将数据源绑定到表单,我可以看到可以访问数据库。但是我需要手动设置一些查询,因为它们比填写表格要复杂得多。
这是我的代码,它只是用来填写表格,但下一步是 login/password 检查:
public partial class UserLogin : Form
{
private SqlCeConnection _conn;
public UserLogin()
{
InitializeComponent();
_conn = new SqlCeConnection(@"Data Source=.\userdb.sdf;Password=PASSWORD;Persist Security Info=True");
}
private void buttonCancel1_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonLoad1_Click(object sender, EventArgs e)
{
try
{
SqlCeCommand cmd = new SqlCeCommand();
cmd.Connection = _conn;
cmd.CommandText = "SELECT userid, username, password FROM Users";
_conn.Open();
SqlCeResultSet resultSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
this.bindingSource1.DataSource = resultSet;
}
catch (SqlCeException sql_ex)
{
MessageBox.Show("SQL database error: " + sql_ex.Message);
}
}
我还尝试了一些不同的方法,其中表单中填充了来自设计器的数据集,但我仍然无法手动访问数据库: https://pastebin.com/10P3wGeP
Windows Mobile 既不知道驱动器盘符也不知道 'current' 目录。这就是为什么 "Data Source=.\userdb.sdf" 总是会失败。
在 windows 移动设备上,您始终必须使用完整的限定路径名才能访问文件。
您可以使用
string path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
获取可执行文件启动目录的路径。