Windows窗体应用程序数据库:“System.Data.dll中发生了'System.ArgumentException'类型的未处理异常”

时间:2014-06-21 16:04:07

标签: c# winforms

我真的是编程新手,所以如果我的知识看起来真的不合适,请原谅。我正在为我的学校做一个C#项目,而且我在启动数据库时遇到了问题。

以下是一些代码:

private void buttonPurchase_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("Purchase?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
    {
        // store invoice
        System.Data.SqlClient.SqlConnection sqlConnection1 =
             new System.Data.SqlClient.SqlConnection("CarDBConnectionString");
        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.CommandText = "INSERT into invoiceTbl(invoiceId, date, time) values (1, 21/6/2014, 11:13PM)";

        sqlConnection1.Open();
        cmd.ExecuteNonQuery();
        sqlConnection1.Close();
     }
}

使用这些代码,我一直面临错误

  

初始化字符串的格式不符合从索引0 1和#34;开始的规范,在"类型' System.ArgumentException'之类的未处理异常。发生在System.Data.dll"

此处还有我的app.config

中的代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <connectionStrings>
    <add name="CarDBConnectionString" connectionString="Data Source=(LocalDB)\v11.0;InitialCatalogue=CarDB;AttachDbFilename=|DataDirectory|\CarDB.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="Draft_1.Properties.Settings.CarDBConnectionString"
      connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\CarDB.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

</configuration>

我到处尝试谷歌搜索,但我似乎无法理解任何解决方案:-(任何帮助将非常感谢,谢谢!

3 个答案:

答案 0 :(得分:3)

"InitialCatalogue"中错误的部分(正确的密钥为Initial Catalog),代码中存在错误。

您需要读取连接字符串的值并将其传递给SqlConnection的构造函数。构造函数需要一个有效的连接字符串,而不是配置文件部分的键

您可以使用

  string connectionString = ConfigurationManager.ConnectionStrings
                                        ["CarDBConnectionString"].ConnectionString;
  SqlConnection sqlConnection1 = new SqlConnection(connectionString);

答案 1 :(得分:2)

@Steve说得好:你必须传递一个有效的连接字符串。

其次,尝试附上参数&#39;单引号中的值如下:

"INSERT into invoiceTbl(invoiceId, date, time) values (1, '21/6/2014', '11:13PM')"

更好的做法是使用包含两条信息的单个日期时间(或命名为 TimeStamp )数据库字段(通常它对应于DateTime.Now)。修改后的查询应如下所示:

"INSERT into invoiceTbl(invoiceId, datetime) values (1, '21/6/2014 11:13PM')"

希望这会有所帮助。 RGDS,

答案 2 :(得分:0)

如果您在服务器下使用“连接”并且您拥有(数据集).xsd文件,也会发生此错误。在这种情况下,.xsd内的连接字符串会受到干扰,您会收到此错误。在我的情况下,我在我的xsd文件中删除了表,并使用新的连接字符串再次创建了相同的表,并且工作正常。

这种方法仅适用于小型项目。但至少你会有一个想法,错误来自哪里。