C# 无法访问数据库(SQL Server CE/Windows Mobile 6.5)

C# 无法访问数据库(SQL Server CE/Windows Mobile 6.5),c#,sql-server-ce,windows-mobile-6.5,windows-embedded,C#,Sql Server Ce,Windows Mobile 6.5,Windows Embedded,我正在为Windows Mobile 6.5设备创建一个应用程序,其中一部分应该在设备插入时复制一个SQL数据库,在设备拔出时有一个本地副本(因为没有连接) 因此,为了拥有本地数据库,我遵循了SQL Server CE(使用我自己的测试数据库),但经常遇到设备无法连接到数据库的问题。我无法调试(因为每次都必须将程序传输到设备以进行测试),但我会收到此错误消息(无论我尝试使用什么连接字符串): SQL数据库错误:未指定的错误[。\userdb.sdf] 我尝试了多个连接字符串,如果我使用设计器将数

我正在为Windows Mobile 6.5设备创建一个应用程序,其中一部分应该在设备插入时复制一个SQL数据库,在设备拔出时有一个本地副本(因为没有连接)

因此,为了拥有本地数据库,我遵循了SQL Server CE(使用我自己的测试数据库),但经常遇到设备无法连接到数据库的问题。我无法调试(因为每次都必须将程序传输到设备以进行测试),但我会收到此错误消息(无论我尝试使用什么连接字符串):

SQL数据库错误:未指定的错误[。\userdb.sdf]

我尝试了多个连接字符串,如果我使用设计器将数据源绑定到表单,我可以看到可以访问数据库。但我需要手动设置一些查询,因为它们比填写表单要复杂得多

这是我的代码,它只是用来填写表单,但下一步将是登录/密码检查:

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);
        }
    }
另外,我尝试了一些不同的方法,表单中填充了来自designer的数据集,但我仍然无法手动访问数据库:
Windows Mobile既不知道驱动器号也不知道“当前”目录。这就是为什么“数据源=。\userdb.sdf”总是失败的原因

在windows mobile上,您必须始终使用完整的限定路径名才能访问文件

你可以用

 string path = System.IO.Path.GetDirectoryName( 
  System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );

获取启动可执行文件的目录的路径。

您可能需要对照exe路径检查当前工作目录,就好像它不是从那里运行一样,但是仅仅调用exe数据库将不在其中。\n可能是您正在其他地方运行,因此找不到它。我从通过FTP传输的目录手动启动.exe(因此路径类似于“/Debug 0.1.3/Reader.exe”。但我尝试了多个连接字符串,有时带有指向另一个目录的完整路径。这可能是SQL Server CE“引擎”造成的吗嵌入到设备上?老实说,我没有在移动设备上尝试过,但通常这是主要问题。我无法获取工作目录,但我尝试将.sdf文件添加到外部内存中。这并不理想,但不是主要的安全问题,因为最终用户将无法浏览这些文件夹。因此,通过此路径,它将显示有效。
Data Source=\Flash File Store\LOCAL\u DB\userdb.sdf;Password=Password;Persist Security Info=True
非常有效,非常感谢!是闪存完整路径的绝佳选择。