我是Visual C#编程语言的新手,最近我试图制作一个应该插入用户本地数据库的应用程序一些数据,但每次我的代码运行并且插入工作正常,数据库不会更新。这是我正在使用的代码
try
{
cn.Open();
SqlCommand insert = new SqlCommand();
insert.CommandText = "insert into Clienti (Nume,Prenume,Parola,Email) values(@Nume,@Prenume,@Parola,@Email)";
insert.Connection = cn;
insert.Parameters.AddWithValue("@Nume", register_nume.Text);
insert.Parameters.AddWithValue("@Prenume", register_prenume.Text);
insert.Parameters.AddWithValue("@Parola", register_password.Text);
insert.Parameters.AddWithValue("@Email", register_email.Text);
insert.ExecuteNonQuery();
SqlDataReader reader = insert.ExecuteReader();
while (reader.Read()) { }
MessageBox.Show("Added succesfully");
}
catch (Exception ex)
{
MessageBox.Show(""+ex);
}
我已经尝试将属性Copy复制到输出,但它似乎不起作用。 对于我所犯的任何语法错误,我感到很抱歉,如果有任何帮助,我将不胜感激。
答案 0 :(得分:2)
因为你现在必须使用select
语句读取数据库,所以你不能使用INSERT
SQL语句来阅读。
您可以在插入后立即添加以下内容。
using(var selectCmd = new SqlCommand("SELECT Nume,Prenume,Parola,Email FROM Clienti WHERE Nume = @Nume", cn))
{
selectCmd.Parameters.AddWithValue("@Nume", register_nume.Text);
using(SqlDataReader reader = selectCmd.ExecuteReader())
{
while (reader.Read()) { }
}
}
如果你想知道如果插入了行或者插入了多少条记录,那么ExecuteNonQuery
会返回受影响的行数。你可以改变这部分代码:
var recordsAffected = insert.ExecuteNonQuery();
if(recordsAffected > 0)
MessageBox.Show("Added succesfully");
else
MessageBox.Show("Nothing happened");
虽然在这种特殊情况下它没有意义,因为如果没有插入任何东西,它可能是由异常引起的。
一些附注
IDisposable
块中包装实现using
的类型(请参阅上面的代码作为示例)。它确保即使抛出异常,资源也会在您完成后立即释放。答案 1 :(得分:2)
insert.ExecuteNonQuery();
SqlDataReader reader = insert.ExecuteReader();
while (reader.Read()) { }
您只需要ExecuteNonQuery
,它将运行INSERT。只有在运行生成结果集的语句(例如ExecuteReader
)时,才需要使用SELECT
而不是。所以它应该是:
insert.ExecuteNonQuery();
答案 2 :(得分:0)
这部分代码正在准备您正在运行的SQL命令
cn.Open();
SqlCommand insert = new SqlCommand();
insert.CommandText = "insert into Clienti (Nume,Prenume,Parola,Email) values(@Nume,@Prenume,@Parola,@Email)";
insert.Connection = cn;
insert.Parameters.AddWithValue("@Nume", register_nume.Text);
insert.Parameters.AddWithValue("@Prenume", register_prenume.Text);
insert.Parameters.AddWithValue("@Parola", register_password.Text);
insert.Parameters.AddWithValue("@Email", register_email.Text);
您的代码正在运行的SQL命令是INSERT
语句,只有将新记录添加到您的表中。
此语句运行您之前设置的命令:
insert.ExecuteNonQuery();
如果我理解正确,在这里你试图再次从表中读取数据:
SqlDataReader reader = insert.ExecuteReader();
while (reader.Read()) { }
问题是,你的命令没有设置为阅读。要读取数据,您需要使用SELECT
语句。像这样:
insert.CommandText = "SELECT Nume,Prenume,Parola,Email from Clienti" ;
因此,要在执行插入后读取数据,您应该这样做:
insert.CommandText = "SELECT Nume,Prenume,Parola,Email from Clienti" ;
SqlDataReader reader = insert.ExecuteReader();
while (reader.Read()) { }
答案 3 :(得分:0)
您执行2次查询:
insert.ExecuteNonQuery();
SqlDataReader reader = insert.ExecuteReader();
尝试获取受影响的行
int rows = insert.ExecuteNonQuery();
我建议在数据库中创建一个存储过程,然后执行SP。
从代码执行SP并将SQL编程保留在DB中总是更好。