【问题标题】:How to insert into database SQL transaction?如何插入数据库 SQL 事务?
【发布时间】:2019-10-05 11:00:32
【问题描述】:

我有一个Log 方法:

public void Log(string log)
{
   command = new SqlCommand() { Connection = connection };
   command.CommandText = "INSERT INTO Logs (Date, Login, Transact) " +
      $"VALUES ('{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}', '{Login}', '{log}')";
   connection.Open();
   command.ExecuteNonQuery();
   connection.Close();
}

在日志字符串中我有这样的值:

"INSERT '/*something*/'"

"UPDATE: '/*smth*/' => '/*smth*/'"

但它不起作用 - 我收到一个错误:

语法错误

我该怎么做?

【问题讨论】:

  • 不要直接在你的 sql 字符串中连接你的值:log 值的单引号会弄乱查询。您应该使用SqlParameter 来分配您的参数

标签: c# sql sql-server ado.net sqlcommand


【解决方案1】:
command.CommandText = "INSERT INTO Logs (Date, Login, Transact) " +
   $"VALUES (@date, @login, @transact)";
command.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
command.Parameters.Add("@login", SqlDbType.NChar).Value = Login;
command.Parameters.Add("@transact", SqlDbType.Text).Value = log;

【讨论】:

  • DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") 应该只是 DateTime.Now,因为它是一个严格类型的 DateTime 参数。
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多