【问题标题】:Cannot insert data into SQL Server from Windows form无法从 Windows 窗体将数据插入 SQL Server
【发布时间】:2021-12-20 11:47:27
【问题描述】:

我正在创建一个显示日历事件的窗口窗体。

当我在特定日期添加事件时,我收到此错误:

System.Data.SqlClient.SqlException: '值'附近的语法不正确

在线cmd.ExecuteNonQuery();

这是我的代码:

namespace PRN_Project
{
    public partial class EventForm : Form
    {
        String ConnectionString = "server=DESKTOP-7NUQVBN; database=Calendar; uid=sa; pwd=123";

        public EventForm()
        {
            InitializeComponent();
        }

        private void EventForm_Load(object sender, EventArgs e)
        {
            tbDate.Text = UserControlDays.static_day + "/" + CalendarForm.static_month + "/" + CalendarForm.static_year;
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConnectionString);
            conn.Open();
            String sql = "INSERT INTO CalendarEvent (TimeDate, EventName) VALUE (?, ?)";

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = sql;
            cmd.Parameters.AddWithValue("TimeDate", tbDate.Text);
            cmd.Parameters.AddWithValue("EventName", tbEvent.Text);

            cmd.ExecuteNonQuery();

            MessageBox.Show("Saved!");

            cmd.Dispose();
            conn.Close();
        }
    }
}

我正在使用 SQL Server 身份验证。

TimeDateEventName 的数据类型是 varchar(255)

【问题讨论】:

  • VALUES 不是VALUE。理想情况下,您应该使用命名参数INSERT INTO CalendarEvent(TimeDate, EventName) values (@TimeDate, EventName)。另请注意:AddWithValue is Evil,明确指定参数类型和长度。并且你需要using 块连接和命令对象
  • @Charlieface 你能具体解释一下吗,我是新手

标签: c# sql-server


【解决方案1】:

试试这个:

private void btSave_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConnectionString);
            String sql = "INSERT INTO CalendarEvent(TimeDate, EventName)values(@TimeDate,@EventName)";
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            cmd.Parameters.AddWithValue("@TimeDate", tbDate.Text);
            cmd.Parameters.AddWithValue("@EventName", tbEvent.Text);
            conn.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Saved !!!");
            cmd.Dispose();
            conn.Close();
        }

你可以使用 TRY Catch finally

private void btSave_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection(ConnectionString);
                String sql = "INSERT INTO CalendarEvent(TimeDate, EventName)values(@TimeDate,@EventName)";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sql;
                cmd.Parameters.AddWithValue("@TimeDate", tbDate.Text);
                cmd.Parameters.AddWithValue("@EventName", tbEvent.Text);
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Saved !!!");
            }
            catch
            {
            }
            finally
            {
                conn.Close();
            }
                
                
                
    }

【讨论】:

  • 而不是 try..catch——最后,只需使用 using (SqlConnection conn = new SqlConnection(ConnectionString)) { ... }
  • @Klaus Gütter 谢谢。而你的方式是另一种好方法和好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2020-06-12
  • 2017-03-17
  • 1970-01-01
相关资源
最近更新 更多