0

好的,从昨晚深夜到今天凌晨,我一直在做这件事。我正在尝试将一些数据插入 SQL Server CE 数据库。我已经走到了尽头。

这是我要实现的代码:

public static void InsertData(string sqlStatement)
{
        try
        {
            //string strConn = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
            //string StartupPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Remove(0, 6); // remove file:\\
            //string connectionString = @"Data Source=Database1.sdf";
            //string connectionString = @"Data Source = |DataDirectory|\Database1.sdf";
            //string connectionString = @"Data Source = C:\Users\My\Documents\Visual Studio 2012\Projects\VIN_Decoder\VIN Decoder\VIN Decoder\Database1.sdf"
            //string connectionString = string.Format("Data Source={0}; Persist Security Info=False;", Path.Combine(Application.StartupPath, "Database1.sdf"));

            //THIS ONE ACTUALLY WORKS!!!!!!!!!!!! :
            //string connectionString = @"Data Source = C:\Users\My\Documents\Visual Studio 2012\Projects\VIN_Decoder\VIN Decoder\VIN Decoder\Database1.sdf"

            string connectionString = Properties.Settings.Default.Database1ConnectionString;
            SqlCeConnection sqlceCon = new SqlCeConnection(connectionString);
            sqlceCon.Open();

            SqlCeCommand sqlCeCom = new SqlCeCommand(sqlStatement, sqlceCon);
            sqlCeCom.ExecuteNonQuery();
            sqlCeCom.Dispose();
            sqlceCon.Close();
        }
        catch (Exception e)
        {
        }
    }

您可以查看所有已注释的连接字符串以了解我尝试过的内容。奇怪的是,我可以简单地在另一种方法(SELECT 语句,而不是 INSERT INTO 语句)中使用以下连接字符串,该方法从数据中获取单个值并且工作正常。

string connectionString = @"Data Source = |DataDirectory|\Database1.sdf";

我已经直接测试了查询,就像评论说的那样,静态路径确实有效,因此告诉我我的查询很好。但是,我当然需要一些相对于发布和多开发人员开发的东西。

我尝试过的大多数连接字符串都允许 try 块在没有错误的情况下完成,但不会插入数据。

有什么建议么?

4

2 回答 2

0

在发布这个问题之前,我搜索了我的内心,但西蒙关于相似性是正确的。但是,我们将在这里得到更好的答案。科拉克是正确的。我将属性设置为不复制,删除 bin\debug 文件夹中的副本,并且应用程序不会在调试模式下运行,因为即使路径都指向其他文件位置,它也找不到 db。应用程序正在寻找 bin\debug 中的副本。最终,它一直在工作。我建议有人连接到 bin\debug 中的副本,以便他们可以在服务器资源管理器中测试值。感谢您的帮助 Corak 和其他所有人。

于 2013-04-07T18:25:01.973 回答
0
/*If your solution is web application, make sure Database1.sdf location path is under the 
     * App_Data folder 
     * Web.Config <add name="LocalDB" connectionString="Data Source=|DataDirectory|\Database1.sdf"/>
     */
    protected string ConnString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings["LocalDB"].ToString();
        }
    }

    /*
     * or you can use try absolute path as connectionstring
     * modify your directory path as PhysicalApplicationPath result
     */
    public string BaseDirConnString
    {
        get
        {
            if ((HttpContext.Current == null) || (HttpContext.Current.Request == null))
            {
                throw new ApplicationException("...");
            }

            return @"Data Source=" + HttpContext.Current.Request.PhysicalApplicationPath + "VIN Decoder\\Database1.sdf";
        }
    }

    protected SqlCeConnection SqlCeConnection
    {
        get
        {
            var connection = new SqlCeConnection(BaseDirConnString);
            connection.Open();
            return connection;
        }
    }
于 2013-04-07T18:27:50.097 回答