无法从 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 身份验证。
TimeDate
和 EventName
的数据类型是 varchar(255)
。
【问题讨论】:
VALUES 不是 VALUE。INSERT 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 的陷阱是啥?