无法从 Windows 窗体将数据插入 SQL Server

Posted

技术标签:

【中文标题】无法从 Windows 窗体将数据插入 SQL Server【英文标题】:Cannot insert data into SQL Server from Windows form 【发布时间】: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 不是 VALUEINSERT INTO TABLE_NAME VALUES (COLUMN_1, COLUMN2) VALUES 不是VALUE。理想情况下,您应该使用命名参数INSERT INTO CalendarEvent(TimeDate, EventName) values (@TimeDate, EventName)。另请注意:AddWithValue is Evil,明确指定参数类型和长度。并且你需要using 块连接和命令对象 @Charlieface 你能具体解释一下吗,我是新手 【参考方案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 谢谢。而你的方式是另一种好方法和好主意。

以上是关于无法从 Windows 窗体将数据插入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

具有 Ms 访问权限的 C# Windows 窗体应用程序无法插入数据

C# Windows 窗体使用 OracleDataAdapter 从系统数据表向 Oracle 表插入行

使用 for 循环将多条记录插入 SQL Server 数据库

将数百万条记录从平面文件插入 SQL Server 的陷阱是啥?

我们可以在 Windows 窗体应用程序中将 sql 精简版数据库移动到 sqlite 数据库吗

将数据从子窗体输入到表格