C#中对SQl数据库进行插入操作,有返回受影响的行数,执行结果是“添加成功”但是在数据困中却没有数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中对SQl数据库进行插入操作,有返回受影响的行数,执行结果是“添加成功”但是在数据困中却没有数据相关的知识,希望对你有一定的参考价值。

string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\AccessControlDB11.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
string sql = "Insert into tbl_StaffInfo(StaffCardID,StaffName,ProfessionClass,StaffNumber) values ('" + txt_StaffCardID.Text.ToString().Trim() + "','" + txt_StaffName.Text.ToString().Trim() + "','" + txt_ProfessionClass.Text.ToString().Trim() + "','" + txt_StaffNumber.Text.ToString().Trim() + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
//cmd.EndExecuteNonQuery();
//string sql = "Insert into tbl_StaffInfo(StaffCardID,StaffName,ProfessionClass,StaffNumber) values ('" + txt_StaffCardID.Text.ToString().Trim() + "','" + txt_StaffName.Text.ToString().Trim() + "','" + txt_ProfessionClass.Text.ToString().Trim() + "','" + txt_StaffNumber.Text.ToString().Trim() + "')";
try

if( cmd.ExecuteNonQuery()==1)

MessageBox.Show("添加成功!");
conn.Close();

else

MessageBox.Show("添加失败!");


catch

MessageBox.Show("信息录入失败,记录不能重复");

我把你的代码测试了一遍,没什么问题,插入也能成功,数据库中也有数据。你的数据库中没有数据,可能是数据库的问题,我建议你把SQL语句直接放到数据库中执行,如果还是没有数据,那就是数据库的问题了。如果有,那就是其他方面的问题了。 参考技术A 数据库没刷新,把数据库中打开的表关闭,刷新一下,重新打开追问

没用的,试过了,谢谢您的回答

参考技术B 可能是没有设置 主键。设置主键看看。 参考技术C 楼上的,你不懂你妹的瞎说什么! 劝楼主问问老师吧!可能是数据库设置有问题吧,不能写入?要不就是代码有问题,地址写错了? 参考技术D 不怎么懂,刚开始学C#。

SQL Server返回插入数据的ID和受影响的行数

首先看看数据库里面的数据(S_Id为自增长标识列):

sql server 中返回上一次插入数据的ID(标识值)有三种方式:

第一种 @@IDENTITY:

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values(\'013\',\'卫庄\',\'男\',\'185\');
3 
4 select @@IDENTITY        -- 返回 17 

@@IDENTITY可以返回当前连接所有范围内插入最后所生成的标识值(包括任何调用的存储过程和触发器)。这个函数不只是可以适用于表。函数返回的值是最后表插入行生成的标识值。比如,现在有一个a表和一个b表,a表插入一条数据并触发 trigger (触发器)为b表插入一条数据,这时@@IDENTITY返回的其实是b表的标识列的值,因为@@IDENTITY它总是获取最后一条变更数据的自增字段的值。@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。

第二种 IDENT_CURRENT:

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values(\'014\',\'大司命\',\'女\',\'183\');
3 
4 select IDENT_CURRENT(\'Student\')        --返回 18

IDENT_CURRENT()是一个函数,它有一个参数,它的参数就是指定要返回的标识列的值的表名。

IDENT_CURRENT()返回为任何会话和任何作用域中的特定表最后生成的标识值, 不受作用域和会话的限制,而受限于指定的表。

第三种 SCOPE_IDENTITY:

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values(\'015\',\'月儿\',\'女\',\'165\');
3 
4 select SCOPE_IDENTITY()        --返回 19

SCOPE_IDENTITY()返回为当前会话和当前作用域中的任何表最后生成的标识值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。

 

IDENT_INCR 用法:

1 -- IDENTITY(1,1) 第一个参数是表示,自增长的起始值,第二个参数表示自增长的增长量,即一次增长多少
2 SELECT IDENT_INCR(\'Student\')    -- 返回 1 

SELECT IDENT_INCR(\'TableName\'),一个参数,\'TableName\' 表示指定表的表名或视图名。

返回指定表的标识字段的增量值(就是自增值,每插入一条新数值序列增加的数值)。

 

IDENT_SEED 用法:

1 -- IDENTITY(1,1) 第一个参数是表示,自增长的起始值,第二个参数表示自增长的增长量,即一次增长多少
2 select IDENT_SEED(\'Student\')    --返回 1

select IDENT_SEED(\'TableName\'),一个参数,\'TableName\' 表示指定表的表名或视图名。

返回指定表的标识字段的种子值(即起始值,指定标识列从哪个数值开始)。

 

sql 获取标识递增的下一个值:

1 --获取当前标识递增的下一个值,即当前标识最大的值的下一个值
2 select IDENT_CURRENT(\'Student\') + IDENT_INCR(\'Student\')

 

sql 返回受上一语句影响的行数:

@@ROWCOUNT 返回受影响的行数(insert、select、delete、update):

1 select * from Student where S_Sex=\'女\'
2 
3 select @@ROWCOUNT    -- 返回 6

如果行数大于 20 亿,请使用 ROWCOUNT_BIG()。

1 select * from Student where S_Sex=\'男\';
2 
3 select ROWCOUNT_BIG()    --返回 9

rowcount 用法:

rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,例如下面的示例:

复制代码
1 -- 查询出前 5 条数据  
2 set rowcount 5
3 select * from Student where S_Sex=\'男\';
4 
5 -- 查询出后 5 条数据
6 set rowcount 5
7 select * from Student where S_Sex=\'男\' order by S_Id desc;
复制代码

也就是说在查询上面 rowcount 有着 top [number] 同样的效果。

要取消set rowcount的限定,只要设置 set rowcount 0 就可以了。

 

注意:set rowcount的限定对修改,删除一样有效。比如下面的示例:

1 set rowcount 3
2 update Student set S_BirthDate=\'2017-01-01\'
3 where S_Id<20
4 
5 select @@ROWCOUNT    --返回 3 
复制代码
1 set rowcount 5
2 delete from Student where S_BirthDate is null
3 
4 select @@ROWCOUNT    --返回 5
5 
6 set rowcount 0
7 
8 select * from Student
复制代码

以上是关于C#中对SQl数据库进行插入操作,有返回受影响的行数,执行结果是“添加成功”但是在数据困中却没有数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server返回插入数据的ID和受影响的行数

返回受 SQL UPDATE 语句影响的行 [重复]

C#中执行insert的SQL语句成功(返回受影响行数为1)却没有在数据库中insert,知道啥原因么?

用于插入/更新 MySql DB 的函数返回错误的“受影响的行”数

2017年7月27~~~

用C#写sql,mysql中修改一条数据 修改成功后返回的是啥(怎么知道修改成功或者失败) 求代码?