【问题标题】:Inserting bool into SQL database, c#将 bool 插入 SQL 数据库,c#
【发布时间】:2019-11-18 15:20:00
【问题描述】:

我正在为我的大学班级制作一个 C# 客户端-服务器应用程序。 我有一个带有表包的 MS Access 数据库,它有一些值,如“name”、“dateFrom”、“dateTo”,以及 2 个名为“internet”和“telephone”的值,它们是 YES/NO 类型

在程序中,我创建了一个类 Package 并将 internet 和 phone 设置为 bool 类型的数据。首先,这是正确的吗?如果值在 MS Access 中设置为 YES/NO,我应该在 C# 中将其设置为 bool 吗?这对我来说似乎是合乎逻辑的..

其次,当我输入用于插入这些值的 SQL 命令时出现错误,我不知道如何将布尔值发送到数据库

这是我的代码

command.CommandText = "Insert into Package values ("+p.PackageID+", '"+ p.Name+"', '"+p.DateFrom.ToString()+"', '"+p.DateTo.ToString()+"', "+Convert.ToBoolean(p.Internet.ToString())+", "+Convert.ToBoolean(p.Telephone.ToString())+")";
command.ExecuteNonQuery();

我尝试了很多东西,这是我最后一次尝试将值转换为能够插入它们..但它不起作用.. 我总是得到 System.InvalidOperationException

【问题讨论】:

  • 请不要使用字符串连接来创建 SQL 命令。使用参数化语句来传递值。您的程序面临 SQL 注入攻击的风险。
  • 即使你只是在学习,也不要在参数上走捷径。您应该学习正确的方法,并一起避免坏习惯。查看 - [dotnetperls.com/sqlparameter]欢迎使用 stackoverflow!
  • “p.Internet.ToString()”和“p.Telephone.ToString()”的值是多少?是/否还是真/假?

标签: c# sql ms-access


【解决方案1】:

由于各种原因,您不应在 SQL 语句中使用字符串连接。使用参数。试试看:

command.CommandText = "Insert into Package values (@param1,@param2@param3,@param4,@param5,@param6)";
command.Parameters.Add("@param1",  OleDbType.Integer).Value = p.PackageID;
command.Parameters.Add("@param2",  OleDbType.VarWChar).Value = p.Name;
command.Parameters.Add("@param3",  OleDbType.Date).Value = p.DateFrom;
command.Parameters.Add("@param4",  OleDbType.Date).Value = p.DateTo;
command.Parameters.Add("@param5",  OleDbType.Boolean).Value = bool.Parse(p.Internet.ToString());
command.Parameters.Add("@param6",  OleDbType.Boolean).Value = bool.Parse(p.Telephone.ToString());
command.ExecuteNonQuery();

【讨论】:

  • 可能需要添加tryparse,除非你知道数据是干净的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多