SqlException 未在 C# 中处理 - 数据库信息 Table

SqlException was unhandled in C# - Information into Database Table

我是 C# 编码的新手,环顾四周,但发现很难推断出我的问题的答案。

我目前正试图掌握将组合框中的文本和选定文本添加到简单数据库中的方法table。但是,当我尝试添加信息时,出现 SqlException 未处理的错误。我查看了其他答案,发现它可能与添加连接有关,我已经尝试过但仍然无法正常工作...

我的代码和错误消息如下图 link 但为了以防万一这里也有我的代码,

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

namespace SavetoDbTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Visual Studio 2015\Projects\SavetoDbTest\SavetoDbTest\Hobbie.mdf;Integrated Security=True")) 
            {
                using (SqlCommand again = new SqlCommand())
                {
                    again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";

                    again.Parameters.AddWithValue("@Name", textBox1.Text);
                    again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
                    again.Connection = test;
                    test.Open();
                    again.ExecuteNonQuery();
                    test.Close();
                    MessageBox.Show("Data Entry Successful");

                }
            }      
        }
    }
}

+1 尝试使用参数化查询!但是你做的不对:-)

again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);

这会在查询字符串不需要参数时添加参数。可能这也是您所看到的异常的原因。

您的查询字符串必须如下所示:

again.CommandText = "INSERT INTO [Table] Values(@Name, @Hobby)";

此外,TABLE是SQL中的保留字。因此,如果您的 table 被命名为 Table,您应该将其括在方括号中。

用这个代替:

private void button1_Click(object sender, EventArgs e)
{
    using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Visual Studio 2015\Projects\SavetoDbTest\SavetoDbTest\Hobbie.mdf;Integrated Security=True")) 
    {
        using (SqlCommand again = new SqlCommand())
        {
            again.CommandText = "INSERT INTO [TableName] Values(@Name,@Hobby)";
            again.Parameters.AddWithValue("@Name", textBox1.Text);
            again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
            again.Connection = test;
            test.Open();
            again.ExecuteNonQuery();
            test.Close();
            MessageBox.Show("Data Entry Successful");
         }
    }      
}

您的代码中有 3 个问题。 1) 您已为 table 名称保留关键字,Table 2) SQL 您从代码构建的查询不正确。 3) 您需要指定您的命令类型。

解决方案:将 table 名称更改为有意义的名称,例如 employeedata 或 testdata,然后根据以下给出的代码修改您的代码。

again.CommandType =  CommandType.Text;
again.CommandText = "INSERT INTO TestData(ColumnName1,ColumnName2) Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
               again.Connection = test;
                test.Open();
                again.ExecuteNonQuery();
                test.Close();
                MessageBox.Show("Data Entry Successful");

PaulF 所述,使用 Try..Catch 块始终是一个好习惯。如果代码不适合您,它会给您异常消息。给你。

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        using (SqlConnection test = new SqlConnection("YourConnectionStringName"))
        {
            using (SqlCommand again = new SqlCommand())
            {
                again.CommandText = "INSERT INTO Table Values(@Name,@Hobby)";
                again.Parameters.AddWithValue("@Name", textBox1.Text);
                again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
                again.Connection = test;
                test.Open();
                again.ExecuteNonQuery();
                test.Close();
                MessageBox.Show("Data Entry Successful");

            }
        }
    }
    catch (Exception ex)
    {   
        throw ex;
    }
}

检查它是否正常工作。希望至少它能给你领先一步的结果让你知道是否出现任何异常

正是因为 table 是保留关键字,所以抛出了这个异常。 SQL 引擎在期望找到 table 的专有名称时遇到此保留关键字并因此抛出异常。尝试指定正确的 table 名称,因为我相信这个 table 名称只是作为示例给出的。

你的陈述应该看起来更像这样 INSERT INTO MyTable Values ...

关于以不正确的方式使用参数化查询的其他答案也是有效的。