【问题标题】:An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll when I tried to insert data into textbox当我尝试将数据插入文本框时,System.Data.dll 中发生了“System.InvalidOperationException”类型的未处理异常
【发布时间】:2013-11-01 18:54:25
【问题描述】:

我正在从 Visual Studio 创建到我的数据库的连接。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;


public partial class CM : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection("server =KIRITI; database =msdb; Integrated Security=True");

protected void Button1_Click(object sender, EventArgs e)
{
    con.Open(); 
    String NotesMaker = TextBox1.Text;
    SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)");
    cmd.ExecuteNonQuery();
    cmd.CommandText = "Select@@Identity";
    con.Close();
}
}

我在 command.Executenonquery() 处收到错误:System.Data.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:ExecuteNonQuery:连接属性尚未初始化。

请帮忙!!我被封了两天!!

【问题讨论】:

  • 你有一个 SQL 注入漏洞。
  • 错误试图告诉你,你的命令需要一个连接。

标签: c# asp.net visual-studio


【解决方案1】:

这是我第一次看到字符串连接导致conn 成为查询的一部分。

你放错了字符串引号,你的语句应该是:

SqlCommand cmd = 
  new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('" + NotesMaker + "'",con);

在您当前的代码中,您传递的是字符串"Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)",因此连接属性未初始化,因此出现异常。

您不应该使用字符串连接来创建查询,而是使用参数。这将使您免于SQL Injection。喜欢:

using(SqlConnection con = new SqlConnection("connectionstring"))
using(SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values(@NotesMaker)",con))
{
    cmd.Parameters.AddWithValue("@NotesMaker", NotesMaker);
    con.Open();
    cmd.ExecuteNonQuery();
} 

【讨论】:

    【解决方案2】:

    您将con 放在SqlCommand 的构造函数的第一个参数的引号内,因此代码抱怨,因为您没有设置SqlCommand 的Connection 属性

    改变

    SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)");
    

    SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"')",con);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多