SQL Server CE连接字符串不允许数据插入

时间:2013-04-07 17:20:46

标签: c# wpf sql-server-ce

好的,从昨晚深夜到今天凌晨,我一直在研究这个问题。我试图将一些数据插入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块完成而没有错误,但数据没有插入。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;
        }
    }