1

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

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

似乎 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();
4

1 回答 1

2

您遇到的问题可能与您的方法有关。

当您说“ Azure 云”时,我假设您指的是Azure 云服务(而不是 Azure 网站)。

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

拥有服务包*不可变*的方法是设计使然。有几点支持该决定:

  • 许多角色(相同类型)可以处理请求(假设您有多个特定 Web 角色的实例);这就是为什么您的服务包需要在所有实例中相同的原因。
  • Azure 执行操作系统的日常维护或修补,并从服务包重新创建您的实例
  • Azure 尝试从服务或硬件故障中恢复——同样,您的实例已从服务包中重建

我认为 Azure 云服务的最佳解决方案是使用云优化解决方案,例如 Azure SQL 数据库。

如果你真的需要使用 SQLite,我会推荐使用Azure Website而不是Azure Cloud Services。使用 Azure 网站,对资源的更改将被更新并被其他网站实例看到。

于 2013-01-25T11:50:29.857 回答