我正在从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();
}
}
我在命令时遇到错误.Executenonquery():System.Data.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
其他信息:ExecuteNonQuery:尚未初始化Connection属性。
请帮忙!!我被封锁了两天!!
答案 0 :(得分:4)
这是我见过字符串连接的第一个地方,导致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();
}
答案 1 :(得分:1)
您将con
放在SqlCommand
的构造函数的第一个参数的引号内,因此代码正在抱怨,因为您没有设置SqlCommand
的连接属性
变化
SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)");
到
SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"')",con);