Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure SQLite插件_C#_Sqlite_Azure - Fatal编程技术网

C# Azure SQLite插件

C# Azure SQLite插件,c#,sqlite,azure,C#,Sqlite,Azure,我有一个Azure云应用程序,我正在尝试将用户上传的数据存储在位于~/AppData/mydb.db的SQLite数据库中。由于部署System.Data.SQLite时遇到许多问题,我修改了代码以使用此库。在调试模式下插入数据时,一切正常 在Azure上部署时,用户提供的数据将插入SQLite数据库。在此过程中不会引发任何错误。但是,当尝试查看数据(现在应该存在于数据库中)时,什么都没有。我还在我的web应用程序上添加了一个链接,这样我就可以下载数据库了。下载时验证数据是否未被保存 Azure

我有一个Azure云应用程序,我正在尝试将用户上传的数据存储在位于~/AppData/mydb.db的SQLite数据库中。由于部署System.Data.SQLite时遇到许多问题,我修改了代码以使用此库。在调试模式下插入数据时,一切正常

在Azure上部署时,用户提供的数据将插入SQLite数据库。在此过程中不会引发任何错误。但是,当尝试查看数据(现在应该存在于数据库中)时,什么都没有。我还在我的web应用程序上添加了一个链接,这样我就可以下载数据库了。下载时验证数据是否未被保存

Azure似乎正在阻止数据库更新。有没有人经历过类似的问题

下面是我正在使用的代码示例:

Community.CsharpSqlite.SQLiteClient.SqliteConnection cnn = new SqliteConnection("data source=file:" + Server.MapPath(@"~\App_Data\mydb.db"));
cnn.Open();

cmd.CommandText = "INSERT INTO Data(x,y,z) VALUES(?,?,?)";

System.Data.Common.DbParameter X = cmd.CreateParameter();
System.Data.Common.DbParameter Y = cmd.CreateParameter();
System.Data.Common.DbParameter Z = cmd.CreateParameter();

cmd.Parameters.Add(X);
cmd.Parameters.Add(Y);
cmd.Parameters.Add(Z);

X.Value = "some"
Y.Value = "sample"
Z.Value = "data"

cmd.ExecuteNonQuery();
dbTrans.Commit();

您遇到的问题可能是您的方法

当你说“Azure云”时,我想你指的是(而不是Azure网站)

就Azure云服务而言,您的部署服务包(服务包包含应用程序代码和服务定义文件)应被视为一个密封包,不能被您的代码修改。但是,您尝试执行的是内部包资源
mydb.db
文件的更新(通过执行一些SQL插入,这将导致
mydb.db
文件更新)

让服务包*不可变*的方法是通过设计实现的。有几点支持这一决定:

  • 许多角色(相同类型)可以处理请求(假设您有多个特定web角色的实例);这就是为什么您的服务包需要在所有实例中都是相同的
  • Azure执行了操作系统的日常维护或修补,并从服务包中重新创建了您的实例
  • Azure尝试从服务或硬件故障中恢复–同样,您的实例已从服务包中重建
我认为Azure云服务的最佳解决方案是使用云优化解决方案,如Azure SQL数据库


如果您真的需要使用SQLite,我建议您使用而不是。使用Azure网站,对您的资源所做的更改将被其他网站实例更新和可见。

我正在做类似的事情,并使用Azure网站,我可以毫无问题地读取和写入SQLite数据库。Tom是正确的。@Tom,在Azure网站上,我认为同样的“密封部署包”概念适用吗?Azure网站可以扩展到多个实例,在这种情况下,只写不是要保存到单个实例上吗?另外,我确实意识到这个答案已经有一年多的历史了,也许Azzure网站的工作方式已经改变了?@Josh,Azure网站使用标准SMB 2.1协议共享基于Azure Blob的文件系统。虽然Azure网站实例是独立的(例如,一个实例的崩溃不会影响其他实例),但它们共享相同的文件系统,因此一个实例编写的更改可以被所有其他实例看到。很高兴知道!您是否有描述此行为的引用?找到它: