C# 尝试通过按钮单击事件将数据添加到sql数据库时,捕获SqlException引发错误无效语法

C# 尝试通过按钮单击事件将数据添加到sql数据库时,捕获SqlException引发错误无效语法,c#,sql,winforms,ado.net,C#,Sql,Winforms,Ado.net,我正在为一个学校项目开发一个应用程序,但在向sql数据库添加数据时遇到了问题。计划是,用户将单击按钮“添加”数据,这将打开一个新表单,其中包含各种文本框,用于输入数据。当用户满意时,单击“添加详细信息”,然后将这些信息添加到sql数据库中。问题是try-catch不断返回一个错误,我不知道为什么,对于一个有着新鲜眼睛的人来说,这可能是一个简单的解决方法。代码如下: using System; using System.Collections.Generic; using System.Compo

我正在为一个学校项目开发一个应用程序,但在向sql数据库添加数据时遇到了问题。计划是,用户将单击按钮“添加”数据,这将打开一个新表单,其中包含各种文本框,用于输入数据。当用户满意时,单击“添加详细信息”,然后将这些信息添加到sql数据库中。问题是try-catch不断返回一个错误,我不知道为什么,对于一个有着新鲜眼睛的人来说,这可能是一个简单的解决方法。代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace CarsULike
{
public partial class AddCust : Form
{
    public AddCust()
    {
        InitializeComponent();
    }

    private void AddCust_Load(object sender, EventArgs e)
    {

    }

    private void AddCustBtn_Click(object sender, EventArgs e)
    {
        if (FirstNameTxtBox.Text == "")
        {
            MessageBox.Show("Please enter a First Name");
        }
        else if (SurnameTxtBox.Text == "")
        {
            MessageBox.Show("Please enter a Surname");
        }
        else if (TitleTxtBox.Text == "")
        {
            MessageBox.Show("Please enter a Title");
        }
        else if (Address1TxtBox.Text == "")
        {
            MessageBox.Show("Please enter an address");
        }
        else if (TownCityTxtBox.Text == "")
        {
            MessageBox.Show("Please enter a Town/City");
        }
        else if (PostCodeTxtBox.Text == "")
        {
            MessageBox.Show("Please enter a Postcode");
        }
        else
        {
            //stores the values entered as variables
            string firstName = FirstNameTxtBox.Text;
            string surname = SurnameTxtBox.Text;
            string title = TitleTxtBox.Text;
            string address1 = Address1TxtBox.Text;
            string address2 = Address2TxtBox.Text;
            string townCity = TownCityTxtBox.Text;
            string postCode = PostCodeTxtBox.Text;
            string mobPhone = MobPhoneTxtBox.Text;
            string homePhone = HomePhoneTxtBox.Text;
        }

        //establishes a connection with the database
        SqlConnection connection = new SqlConnection(@"Data Source=Lee-PC\SQLEXPRESS; Initial Catalog=CarsULike_P116274;Integrated Security=True");
        SqlCommand cmd = new SqlCommand();
        //SqlDataReader datareader;
        string sql;

        try
        {
            // this query is for insertion into the Customer table
            sql = "INSERT INTO Customer (FirstName, Surname, Title, AddressLine1, AddressLine2, TownCity, PostCode, EmailAddress, MobilePhoneNo, HomePhoneNo)";
            sql += String.Format("VALUES, @FirstName, @Surname, @Title, @AddressLine1, @AddressLine2, @TownCity, @PostCode, @EmailAddress, @MobilePhoneNo, @HomePhoneNo)");

            cmd = new SqlCommand(sql, connection);
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.AddWithValue("@FirstName", FirstNameTxtBox.Text);
            cmd.Parameters.AddWithValue("@Surname", SurnameTxtBox.Text);
            cmd.Parameters.AddWithValue("@Title", TitleTxtBox.Text);
            cmd.Parameters.AddWithValue("@AddressLine1", Address1TxtBox.Text);
            cmd.Parameters.AddWithValue("@AddressLine2", Address2TxtBox.Text);
            cmd.Parameters.AddWithValue("@TownCity", TownCityTxtBox.Text);
            cmd.Parameters.AddWithValue("@PostCode", PostCodeTxtBox.Text);
            cmd.Parameters.AddWithValue("@EmailAddress", MobPhoneTxtBox.Text);
            cmd.Parameters.AddWithValue("@MobilePhoneNo", HomePhoneTxtBox.Text);
            cmd.Parameters.AddWithValue("@HomePhoneNo", HomePhoneTxtBox.Text);

            connection.Open(); //opens connection
            cmd.ExecuteNonQuery(); //writes to the database
            MessageBox.Show("Details Added", "Successful");
        }

        catch (SqlException ex)
        {
            throw new Exception("Error adding details", ex);

        }
        finally
        {
            connection.Close(); // Close connection
        }
    }

    private void CancelAddCustBtn_Click(object sender, EventArgs e)
    {
        this.Close();   // Close current form
    }
}

我环顾四周,但似乎找不到我要找的……或者我只是不知道我要找的是什么

改变

"VALUES, @FirstName, @Surname, @Title, @AddressLine1, @AddressLine2, @TownCity, @PostCode, @EmailAddress, @MobilePhoneNo, @HomePhoneNo)"

"VALUES ( @FirstName, @Surname, @Title, @AddressLine1, @AddressLine2, @TownCity, @PostCode, @EmailAddress, @MobilePhoneNo, @HomePhoneNo)"
将逗号改为打开括号

可能还有其他错误,但这绝对是一个错误

此外,您可能需要调整catch语句,以确保看到的是确切的sql错误。通常,SQL异常(或内部异常)将为您提供有关SQL代码错误或连接字符串是否存在问题的非常好的线索

在这部分

“值,@FirstName


你没能打开一个括号,这就是错误所在。

哈哈-就这么简单。没有更多的错误。谢谢Brian,我知道你们中的一个人能在一分钟内完成我在几个小时内尝试的事情:)需要等待9分钟才能设置为答案,但我对此很满意。再次感谢你,没有问题。我建议“尝试一下”“在将SQL代码放入应用程序之前,请先将其放入SSMS中。SSMS提供了一些很好的SQL智能感知,可以帮助您更快地发现错误。一旦进入你的C#,它们就很难被发现。然后,接下来,您会想看看LINQ to SQL或用于DB访问的实体框架。学习如何区分无关事实和相关事实。