使用Microsoft Visual Studio社区 - 通过Azure进行部署。
我已经坚持这个问题5天了。在尝试将用户答案保存到测验时,我保持得到此错误。我已经看了很多其他解决方案,人们问同样的事情,并没有找到任何解决我的解决方案。这是完整的错误:
类型' System.ArgumentException'的例外情况发生在System.Data.dll中但未在用户代码中处理 附加信息:初始化字符串的格式不符合从索引0开始的规范。
我查看并重新查看了我的连接字符串和代码本身并没有发现任何错误。
这是我的代码:
@using WebMatrix.Data;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var Q1 = "";
var Q2 = "";
var Q3 = "";
var Q4 = "";
var Q5 = "";
var Q6 = "";
var Q7 = "";
var Q8 = "";
var Q9 = "";
var Q10 = "";
var weeknum = "";
if (IsPost)
{
Q1 = Request.Form["Question1"];
Q2 = Request.Form["Question2"];
Q3 = Request.Form["Question3"];
Q4 = Request.Form["Question4"];
Q5 = Request.Form["Question5"];
Q6 = Request.Form["Question6"];
Q7 = Request.Form["Question7"];
Q8 = Request.Form["Question8"];
Q9 = Request.Form["Question9"];
Q10 = Request.Form["Question10"];
weeknum = "1";
var db = Database.OpenConnectionString("PayForPlay", "System.Data.SqlClient");
var insertCommand = "INSERT INTO PayForPlay.WeeklyPredictions (WeekNumber, Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10) Values(@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10) ";
db.Execute(insertCommand, weeknum, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10);
Response.Redirect("~/Home/Submitted");
这是我的连接字符串:
<connectionStrings>
<add name=“PayForPlay"
providerName="System.Data.SqlClient"
connectionString="Data Source=tcp:memberships2016.database.windows.net,1433;Initial Catalog=PayForPlay;Integrated Security=False;User Id=annah@memberships2016;Password=Annie207!;Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" />
<!--<add name="PayForPlay" connectionString="Data Source=memberships2016.database.windows.net;Initial Catalog=PayForPlay;Integrated Security=False;User ID=annah;Password=*********;Connect Timeout=15;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False " /> -->
</connectionStrings>
我评论的连接字符串部分是我尝试过的另一个连接字符串(遵循azure格式)并且它没有用。
答案 0 :(得分:0)
WebMatrix.Data.OpenConnectionString需要一个完整的连接字符串,而不是存储在配置文件中的连接字符串的键名。
OpenConnectionString方法与Open方法不同 使用存储在Web.config中的连接字符串的名称 文件。您可以在连接时使用OpenConnectionString方法 string是以编程方式生成的或由用户提供。
这解释了为什么该方法无法将'PayForPlay'理解为连接字符串。它希望看到"Data Source=memberships2016....."
相反,请阅读建议的Open方法的文档,您可以看到:
Open(String)方法可以通过两种方式连接到数据库。该 Open(String)方法首先搜索Web应用程序的App_Data 与传递的名称匹配的数据库文件的文件夹 (没有文件扩展名)方法。 如果没有匹配 找到数据库文件,该方法搜索应用程序 用于匹配名称的连接字符串的Web.config文件。
因此,似乎应该使用Open方法
来解决您的问题var db = Database.Open("PayForPlay");