尝试使用 C# ado,net 将行插入到 sql server 数据库

2023-12-05

我正在尝试在控制台应用程序中使用 Ado.Net 在 SQL Server 数据库中插入一行 我正在从键盘读取输入......

这是我的代码:

private void InsertStudents(string con)
{      
   SqlConnection Connection = new SqlConnection(con);
   SqlDataAdapter adapter = new SqlDataAdapter();

   int id               = Convert.ToInt32(Console.ReadLine());
   string     firstName = Console.ReadLine();
   string      lastName = Console.ReadLine();
   DateTime dateOfBirth = Convert.ToDateTime(Console.ReadLine());
   double   tuitionFees = Convert.ToDouble(Console.ReadLine());

   string sql = "$insert into product (ID,FirstName,LastName,DateOfBirth,TuitionFees) values {id}, {firstName}, {lastName}, {dateOfBirth}, {tuitionFees})";
   try
   {
        Connection.Open();
        adapter.InsertCommand = new SqlCommand(sql, Connection);
        adapter.InsertCommand.ExecuteNonQuery();
        Console.WriteLine(" 1 Row inserted!");
   }
   catch (Exception ex)
   {
        Console.WriteLine(ex.ToString());
   }
}

我的问题是编译器将我的内插字符串读取为字符串,但不将列识别为变量......它将整行读取为单个字符串。 问题是什么?


这个非常重要:do not通过 SQL 使用内插字符串;这是各方面都很糟糕:

  • 安全性:SQL注入
  • 性能:查询计划重用
  • 可靠性:带有保留符号的脆性,例如'
  • 正确性:i18n/l10n(即格式)问题 - 尤其与DateTime值(出生日期;“07/11/2020”是 11 月 7 日吗?还是 7 月 11 日?) - 还有学费金额(在“123,456”中,逗号是小数分隔符吗(法国等人) ?或组分隔符?)

正确的做法是参数。总是。

所以,SQL 如下:

insert into product (ID,FirstName,LastName,DateOfBirth,TuitionFees)
values (@id, @firstName, @lastName, @dateOfBirth, @tuitionFees)

为了做到这一点,either了解 ADO.NET 参数,或者:使用类似的工具Dapper这简化了它:

int id = ...
string firstName = ...
string lastName =  ...
DateTime dateOfBirth = ...
double   tuitionFees = ...

using var conn = new SqlConnection(con); // Dapper will deal with the open/close
conn.Execute(@"
insert into product (ID,FirstName,LastName,DateOfBirth,TuitionFees)
values (@id, @firstName, @lastName, @dateOfBirth, @tuitionFees)",
    new { id, firstName, lastName, dateOfBirth, tuitionFees });

另外,最后注意:不要使用double对于货币;使用decimal. double不适合货币金额。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 C# ado,net 将行插入到 sql server 数据库 的相关文章

  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • SSRS ReportViewer 与 XML 嵌入数据源相关的问题

    我有 C WPF 应用程序 我想在 ReportViewer 控件中显示 SSRS 报告 本地报告文件中嵌入了 XML 数据源 从 SQL Server Business Intelligence Development Studio 运行
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 访问连续表:添加控件而不修改基础表?

    我正在制作一个简单的访问表单 连续视图 详细信息部分中有一个复选框 页脚中有一个命令按钮 这样 用户可以使用复选框 选择 多个记录 然后单击按钮上的命令按钮来运行更新所选记录的脚本 无需永久存储这些检查值 通常 我会向基础表添加一个布尔字段
  • 更改文本区域中特定部分的文本颜色

    是否有可能更改 HTML 文本区域中某些部分的文本颜色 我喜欢在我的网站上输出一些突出显示的 PHP 代码 并可以通过单击此文本区域来选择完整的代码 我已经编写了一个 JavaScript 函数来选择完整的文本 但如果我尝试在文本周围放置跨
  • 将图钉放在屏幕中央,MKMapView

    我有一个使用以下代码删除 pin 的功能 ParkPlaceMark placemark ParkPlaceMark alloc initWithCoordinate location mapView addAnnotation place
  • 第二次单击时 redux 状态值发生变化

    我是 redux 的新手 我已将其与我的 React 应用程序集成 但我有一个关于小测试的说明 在下一个示例中 我看到用户的值在我的第二次单击时添加了 减速机 const initialState user password export
  • 计算表行数

    检索表中记录数的 MySQL 命令是什么 SELECT COUNT FROM fooTable 将计算表中的行数 See the 参考手册
  • getJSON 调用中的错误处理

    如何处理 getJSON 调用中的错误 我尝试使用 jsonp 引用跨域脚本服务 如何注册错误方法 getJSON 是常规 AJAX 调用的一种抽象 您必须在其中告诉您需要 JSON 编码的响应 ajax url url dataType
  • Ionic - 按下按钮后显示微调器

    This spinnerionic 的选项一直在旋转像这儿
  • JdbcTemplate - 使用 SQL MERGE 插入或更新 Oracle BLOB

    使用 JdbcTemplate 我想调用 MERGE SQL 语句 该语句将向表中插入新记录 或者如果具有特定键的行已存在则进行更新 关键部分是其中一列是 Oracle BLOB 类型 这是我到目前为止所尝试的 Try 1 sql语句 St
  • Java - 使用 Apache Commons 数学库计算导数

    我在使用 apache commons 数学库时遇到问题 我只想创建像 f x 4x 2 2x 这样的函数 并且我想计算这个函数的导数 gt f x 8x 2 我读过关于差异化的文章 http commons apache org prop
  • 过滤 thenInclude 三个嵌套级别

    我试图向下过滤三个子级别并仅查找 Property Mailing Address Status True 的子元素 它仍然返回 PropertyMailingAddress Status 下为 False 的值 如何将过滤器向下转换三级并
  • 使用 SqlBulkCopy 触发每个插入行的触发器

    我在用SqlBulkCopy类一次在表中插入 50k 行tbl records我已经设置了一个After Insert在此表上触发并使用以下代码 SqlBulkCopy SqlBc1 new SqlBulkCopy strConnStrin
  • 如何使用以下访问日志获取 uniq 报告

    Input Severity Warning Missing argument 1 for Pxxer rzxczt v3 mast sdfdsfv ddw hdd nddd system adsdn codsds pr rt v3 php
  • 如何解析 XML 以检索嵌入的文本节点

    我想解析这个 XML 文件 要解析的 XML 文件
  • 为什么不允许“SplFileInfo”序列化?

    我正在尝试存储一个数组SplFileInfo缓存中的实例serialize命令 但该命令抛出此异常 Exception with message Serialization of SplFileInfo is not allowed 为什么
  • Pygame:画线

    在我之前的问题中Python 中的 For 循环函数 我在放置包含为刽子手游戏画线的命令的函数时遇到了麻烦 它并没有完全划清界限 我首先怀疑这是 for 循环或函数的问题 现在我意识到 Pygame 存在一些问题 我尝试在加拿大国家使用此代
  • PDO:用bindvalue和%来准备

    我在各个网站上查看了一个多小时 但无法解决我的问题 所以这是有效的代码 animes array q this gt db gt query SELECT id nom nom id FROM animes WHERE nom LIKE c
  • django 1.11.4 中的错误('datetime.datetime'对象没有属性'split')

    我正在通过官方文档上的教程学习 django 版本 1 11 4 我使用 python 3 6 5 和 mysql8 作为数据库 我还使用 mysql connector django 连接到 mysql 数据库 我尝试制作第一个 Djan
  • 正则表达式。查找包含某个单词的段落

    在这样的文本中 p 1 bla bla em bla em bla bla p p 2 bla bla em bla em bla TEXT bla p p 3 bla bla em bla em bla bla p p 4 bla bla
  • Google App Engine - 单个数据存储大约使用多少配额?

    数据存储放入的延迟约为 150 毫秒 http code google com status appengine detail datastore 2010 03 11 ae trust detail datastore put laten
  • 尝试使用 C# ado,net 将行插入到 sql server 数据库

    我正在尝试在控制台应用程序中使用 Ado Net 在 SQL Server 数据库中插入一行 我正在从键盘读取输入 这是我的代码 private void InsertStudents string con SqlConnection Co