我试图插入一些我作为项目保留的单词。我的项目是asp.net web项目。我想为每个单词生成id并保持4个字段为null。我的单词表中有6个字段database.id字长fr布尔权重。
当我运行项目时,我收到此错误。
ExecuteNonQuery需要一个开放且可用的连接。该 连接的当前状态已关闭。
这里是代码,
using (con){
con.Open();
foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them)
id++;
SqlCommand cmd= con.CreateCommand();
cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')";
cmd.ExecuteNonQuery();
con.Close();
}
编辑:
我已将con.Close移出迭代循环但现在我遇到了这个错误;
' /'中的服务器错误应用
'附近的语法不正确。字符后面有未闭合的引号 字符串')'。
using (con){
con.Open();
foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them)
id++;
SqlCommand cmd= con.CreateCommand();
cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')";
cmd.ExecuteNonQuery();
} con.Close();
} }
答案 0 :(得分:3)
在您的代码中:
using (con){
con.Open();
foreach (var item in results) {
//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them)
id++;
SqlCommand cmd= con.CreateCommand();
cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')";
cmd.ExecuteNonQuery();
con.Close();
}
你已经在foreach中写了con.Close(),所以在第一个循环结束时你关闭你的连接。
所以在你的foreach的近括号之后移动con.Close(),如下所示:
using (con){
con.Open();
foreach (var item in results) {//here trying to insert word its id and some other informations but for now they can stay null(yes,null allowed for them)
id++;
SqlCommand cmd= con.CreateCommand();
cmd.CommandText= "insert into word values('"+id+"','"+item.Word+"','"+0+"','"+0+"','"+0+"','"+0+"')";
cmd.ExecuteNonQuery();
}
con.Close();
答案 1 :(得分:2)
在第一次迭代时关闭SQL连接。
移动线:“con.Close();”在循环之外。
对于第二个问题,请确保在word属性中转义quatation mark 并尝试使用字符串格式来创建插入字符串
string word = String.Replace(item.Word,"'","''")
cmd.CommandText = string.Format("insert into word values('{0}','{1}','{2}','{3}','{4}','{5}')", id, word, 0, 0, 0, 0);
答案 2 :(得分:1)
移动con.Close();在foreach(){}
之外答案 3 :(得分:1)
你必须确保每个单词(item.Word)都没有引号char,也许
String.Replace(item.Word,"'","''")
解决您的问题。