关于C#中ExecuteNonQuery()的问题

private void button1_Click_1(object sender, EventArgs e)
{
string startTime1 = dateTimePicker1.Value.Date.ToShortDateString();
string startTime2 = dateTimePicker2.Value.ToString("HH:mm:ss");
string endTime1 = dateTimePicker3.Value.Date.ToShortDateString();
string endTime2 = dateTimePicker4.Value.ToString("HH:mm:ss");
MessageBox.Show(startTime1 +" "+ startTime2);
MessageBox.Show(endTime1 + " " + endTime2);
//数据库连接字符串
string consql = "Data Source=.;Initial Catalog = janitor_blank;uid=sa;pwd=12345678";
string sql = "process";
//建立连接
SqlConnection con = new SqlConnection(consql);
//建立查询命令,表示对数据库执行一个SQL语句或存储过程
try
{
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@startTime", SqlDbType.DateTime).Value = startTime1 + " " + startTime2;
cmd.Parameters.Add("@endTime", SqlDbType.DateTime).Value = endTime1 + " " + endTime2;
cmd.CommandTimeout = 0;
con.Open();
//MessageBox.Show(cmd.ExecuteNonQuery().ToString());
int count = cmd.ExecuteNonQuery();//这个是返回受影响的行数,当插入重复值时数据库会报防止插入重复键,语句终止错误
MessageBox.Show("执行完成!已成功插入" + count + "条数据");
问题:执行的是一个存储过程,cmd.ExecuteNonQuery(),但插入数据有重复值时无法执行到MessageBox.Show这一步

你说的是主键重复时候报错吧。
这种情况一般在数据插入前判断数据表中是否有该数据。
修改方法有两种:
第一种是修改原来的process过程,在过程中插入数据前先判断有无数据,有数据则不插入;

第二种是修改程序,在执行process过程前,执行一次有无数据的查询,通过结果来判断是否运行process过程。追问

是的,在插入重复键是报错。
那请问怎么做到您所提到的哪两种修改方法呢?
谢谢指导

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-03
你数据重复时,不是会提示“防止插入重复键,语句终止错误”这个错误吗,那程序也终止了啊,就不会继续向下执行了,既然不能插入重复键干嘛不解决这个问题追问

请问如何就解决重复键问题?谢谢

追答

在表里加一个自增列ID啊,或者你所创建的主键列,你可以在程序里去控制

本回答被网友采纳

关于C#中ExecuteNonQuery()的问题
第一种是修改原来的process过程,在过程中插入数据前先判断有无数据,有数据则不插入;第二种是修改程序,在执行process过程前,执行一次有无数据的查询,通过结果来判断是否运行process过程。

C# sqlite 里面 ExecuteNonQuery() 出了问题
ExecuteNonQuery 是用来执行 insert update delete 这些语句的,不用返回查询结果的。其返回值为受影响的行数。CREATE TABLE IF NOT EXISTS student(id integer, name varchar(20), sex varchar(2)) 你这个语法不对 改成CREATE TABLE student(id integer, name varchar(20), sex varchar(2))试下 ...

C#这个ExecuteNonQuery();执行什么意思?try,catch,finally.三个什么作...
第一个问题:ExecuteNonQuery();方法的意思是针对已经连接的存储过程执行SQL语句并返回受影响的行数!说白了就是执行sql语句!第二个问题:try,catch,finally这是程序里捕获异常很常用的结构!功能:try:字面意思,试着捕获异常!catch:抓住的意思,如果try发现了异常,我就抓住他!finally:只要程序进入...

C# ExecuteNonQuery问题
你这样做返回结果应该是负数,ExecuteNonQuery方法是执行更新语句的方法,如果向执行查询语句,应该用Command对象的ExecuteReader方法来取得结果集。

ExecuteNonQuery()返回值的几种情况
ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1。(回滚的意思:删除由一个或多个部分完成的事务执行的...

c# Sql ExecuteNonQuery 的问题
ExecuteNonQuery返回的是影响的结果集的数量,并不是查询并取出值,应该将ExecuteNonQuery改为ExecuteScalar 假定你的sqlhelper有ExecuteScalar这个方法的话。

C# ExecuteNonQuery() sql语法错误
\/\/ExecuteNonQuery 为 Transaction 操作:SqlTransaction tran = THDataBase.Conn.BeginTransaction();SqlCommand comm = new SqlCommand(strSQl1, THDataBase.Conn, tran);object result;try { result = comm.ExecuteNonQuery();} catch{;;;} \/\/自己catch return result \/\/ 你试试看 ...

C# cmd.ExecuteNonQuery()问题
n = (int)cmd.ExecuteNonQuery();} catch { } return n;} 通常写成这样较好 public class DataAccess { SqlConnection conn = null;SqlCommand comm = null;public DataAccess(){ string str = ConfigurationManager.AppSettings["ConnectionString"].ToString();conn = new SqlConnection(str);} \/\/...

c#删除SQL数据库的数据,无论删除是否成功cmd.ExecuteNonQuery()的...
cmd.ExecuteNonQuery();Response.Write(cmd.ExecuteNonQuery());第一句你已经执行了删除,那么Response.Write参数中又去删除了一次,这样就造成了你先删除,实际上程序已经返回了受影响的行数,只是你没有接收到。可以修改为以下两种方法:1,先使用变量接收到受影响的行数,再返回变量的值 int count=cmd....

c# SqlCommand对象的ExecuteNonQuery()方法返回为0,但是数据库里面却更...
SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影响的行数。虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于 Update、Insert 和 Delete 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值...

相似回答