【问题标题】:How can I use C# parameters to insert into a SQL Database? [duplicate]如何使用 C# 参数插入 SQL 数据库? [复制]
【发布时间】:2019-05-22 14:53:39
【问题描述】:

我在使用 C# 中的参数插入 SQL 数据库时遇到问题。我的连接已经在工作了

我已经尝试了 Add,AddWithValue

static void parameter_insert(SqlConnection conn, int number)
{
    try
    {
        conn.Open();                
        SqlCommand command = new SqlCommand(@"INSERT INTO test1.dbo.shopping_list(NAME, QUANTITY, QUALITY, FOOD_GROUP, FOODS VALUES('Bread', @Quantity, 'Poor', 'Carbs', 'Good')", conn);
        command.Parameters["@Quantity"].Value = 3;
        command.ExecuteNonQuery();
        Console.WriteLine("Parameter insertion successful.");
    }
    catch
    {
        Console.WriteLine("Parameter insertion failed.");
    }
}

输出让我插入失败

【问题讨论】:

  • 捕获异常并查看它的内容。你的 SQL 是错误的。看起来您在列列表周围缺少括号。
  • 异常说明了什么?这将是找到问题的第一步。如果我们只知道出了点问题,那么编程将变得更加困难,我们必须通过阅读代码和猜测或反复试验来解决问题。
  • 删除 catch 及其无意义的错误消息。你应该得到一个语法错误,它实际上告诉你问题是什么。 (或者首先是一个IndexOutOfRangeException 用于您没有添加到集合中的参数。)正确的异常处理至少会涉及catch (SqlException e) { Console.WriteLine("Insertion failed: " + e.Message); } 之类的东西。
  • 只是添加一些东西,你应该在使用完后立即关闭它
  • 这可能会因为印刷错误而关闭。他们缺少列列表周围的右括号。

标签: c# sql


【解决方案1】:

您的插入查询语句中缺少右括号:

"INSERT INTO test1.dbo.shopping_list(NAME, QUANTITY, QUALITY, FOOD_GROUP, FOODS)"+ //<--missing clossing parenthesis
" VALUES('Bread', @Quantity, 'Poor', 'Carbs', 'Good')";

在任何情况下,作为一般规则,您最好将实际异常消息记录在 catch 块上,而不是用自定义消息吞下它。

catch (Exception ex)
{
   Log(ex.ToString());
   ....//Inform user
}

【讨论】:

  • @Igor ToString() 调用可确保记录所有堆栈跟踪
  • 不知道为什么,但我认为你有 .Message 而不是 ToString,评论已撤消。
  • 非常感谢...我的愚蠢疏忽
  • 非常感谢艾米...非常感谢,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多