首页 > 解决方案 > “名称”附近的语法不正确,并在 cmd.ExecuteNonQuery() 处发出警告

问题描述

private void btsSave_Click(object sender, EventArgs e)
{
    try
    {
        string sql = "insert into tblRegistration (Name,Father Name) Values( '" + txtName.Text + "', '" + txtFname.Text + "' )";

        SqlCommand cmd = new SqlCommand(sql, con);

        if (cmd.ExecuteNonQuery() != null)
        {
            MessageBox.Show("Data Saved");

            txtName.Text = "";
            txtFname.Text = "";
            txtName.Focus();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

标签: c#asp.netsql-server

解决方案


避免列名中的空格通常是一个好主意。我不认为在 SQL Server 中使用带空格的列名周围的单引号是有效的(如果你正在使用的话)。相反,您需要将列名括在方括号中,因此:

insert into tblRegistration(Name, [Father Name])
...

我还建议使用参数化查询来降低 SQL 注入风险:https ://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.parameters?view=netframework-4.8

您的查询看起来像这样以及设置参数:

// Query text
string sql = "insert into tblRegistration (Name, [Father Name]) values (@Name, @FatherName)";

// After you create your cmd object
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@FatherName", txtFname.Text);

推荐阅读