c# - “名称”附近的语法不正确,并在 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);
}
}
解决方案
避免列名中的空格通常是一个好主意。我不认为在 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);
推荐阅读
- react-native - 包含在屏幕反应原生中的模态
- javascript - 在 aws lambda 中运行时加密验证签名失败
- python-3.x - 如何在python中链接几个散景/全息视图/面板对象的悬停?
- python - 线程 0 在使用 C 库和 Python 时崩溃
- angular - 在单个 Ionic + Angular 项目中的两个 ionic 应用程序之间导航
- python - 在 Dataframe 上将 STR 转换为 INT 不适用于特定部分
- c++ - 与 std::function<> 相关的问题。这是如何工作的?
- encryption - “Scripting.Encoder”.EncodeScriptFile() 替代品?
- google-cloud-platform - 具有跨项目 Cloud Run 服务的 GCP 负载平衡器
- angular - 角度测试 - NullInjectorError: StaticInjectorError(DynamicTestModule)[NgxPermissionsDirective -> NgxPermissionsService]