关于数据库sqlcommand和sqldatareader的问题

问题描述

我想要在数据库中读到一行数据时,执行更新,读不到数据时,就执行插入数据;可是sqlcommand和sqldatareader好像只能执行一个,请教各位,我该怎么做才能实现该功能privatevoidtestToolStripMenuItem_Click(objectsender,EventArgse){//构造连接字符串stringconnstr=System.Configuration.ConfigurationManager.ConnectionStrings["wintechdb"].ConnectionString;SqlConnectionconn=newSqlConnection(connstr);//构造连接对象stringselectsql="select*from"+"""+pnumber.Text+""";SqlCommandcmdSelect=newSqlCommand(selectsql,conn);//构造命令对象conn.Open();for(inti=0;i<dataGridView1.Rows.Count-1;i++){//获取datagridview单元格数据stringnumber=dataGridView1.Rows[i].Cells["图号"].Value.ToString();stringname=dataGridView1.Rows[i].Cells["名称"].Value.ToString();stringsize=dataGridView1.Rows[i].Cells["规格"].Value.ToString();intamount;boolb1=int.TryParse(dataGridView1.Rows[i].Cells["数量"].Value.ToString(),outamount);stringmaterial=dataGridView1.Rows[i].Cells["材料"].Value.ToString();doublepiece;doubletotal;boolb2=double.TryParse(dataGridView1.Rows[i].Cells["单重"].Value.ToString(),outpiece);boolb3=double.TryParse(dataGridView1.Rows[i].Cells["总重"].Value.ToString(),outtotal);stringremark=dataGridView1.Rows[i].Cells["备注"].Value.ToString();SqlDataReaderreader=cmdSelect.ExecuteReader();//读取表格if(reader.Read())//如果读到则更新数据{stringsqlstr="update"+"""+pnumber.Text+"""+"setbdrawnumber='"+number+"',"+"bname='"+name+"',bsize='"+size+"',bamount='"+amount+"',bmaterial='"+material+"',bpieceweight='"+piece+"',"+"btotalweight='"+total+"',bremark='"+remark+"'";SqlCommandcmdUpdate=newSqlCommand(sqlstr,conn);reader.Close();reader.Dispose();cmdUpdate.ExecuteNonQuery();}else//没有读到数据则插入数据{stringsqlstr="insertinto"+"""+pnumber.Text+"""+"(bdrawnumber,bname,bsize,bamount,bmaterial,bpieceweight,"+"btotalweight,bremark)values('"+number+"','"+name+"','"+size+"','"+amount+"','"+material+"','"+piece+"','"+total+"','"+remark+"')";SqlCommandcmdInsert=newSqlCommand(sqlstr,conn);reader.Close();reader.Dispose();cmdInsert.ExecuteNonQuery();}}MessageBox.Show("写入数据库成功");conn.Dispose();}

解决方案

解决方案二:
我上面的代码只能实现更新一行,因为每次都将reader关闭了,该怎么改才是正确的
解决方案三:
使用存储过程,将逻辑写在存储过程里
解决方案四:
你无非就是想通过dgv控件同时实现数据的修改与新增。况且你的selectsql只执行了一次,因为你的pnumber看着是没有变化的。逻辑有问题吧,最好使用DataAdapter与DataSet使用Binding方式对dgv进行操作。参见:

时间: 2024-09-13 08:43:56

关于数据库sqlcommand和sqldatareader的问题的相关文章

EF-DbUpdateException--实体类和数据库列不对应的解决方案

错误信息 1.VS实体类里面的字段 2数据库里面的字段 猜测是因为字段数不匹配导致的 3删除多余字段   5.结果   错误信息贴上: -------------------------Log_Header------------------------- 2015-06-06 18:54:05,942 [6] ERROR log - System.Data.Entity.Infrastructure.DbUpdateException: 更新条目时出错.有关详细信息,请参阅内部异常. --->

最简单的ASP.NET数据库操作示例源代码

using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.W

ASP.NET访问Oracle数据库的方法

asp.net|oracle|访问|数据|数据库 引言 Microsoft .NET Framework Data Provider for Oracle(以下简称为.NET for Oracle)是一个.NET Framework的组件.这个组件为我们使用.NET访问Oracle数据库提供了极大的方便.那些使用.NET和Oracle的开发人员,相信会乐的手舞足蹈,因为他们再也不必使用那个并不十分"专业="的OLEDB来访问Oracle数据库了.这个组件的设计非常类似.NET中内置的M

使用COBOL.net访问数据库

访问|数据|数据库 <@ Page language="COBOL"><html><head>    <script runat="server" language="COBOL">       ENVIRONMENT DIVISION.       CONFIGURATION SECTION.       REPOSITORY.       PROPERTY DataSource       PR

简介使用ASP.NET访问Oracle数据库的方法

asp.net|oracle|访问|数据|数据库 摘要 本文简要介绍了使用ASP.NET访问Oracle数据库的方法.首先,介绍了组件的安装:其次,简单说明了System.Data.OracleClient中包含的核心类:最后,通过一个实例讲解了具体的使用方法. -------------------------------------------------------------------------------- 目录 引言 系统需求和安装 核心类介绍 举例说明 参考信息 -------

sql-asp.net读取txt文件内容,并把内容全部导入到数据库表里

问题描述 asp.net读取txt文件内容,并把内容全部导入到数据库表里 string textName = TextBox1.Text; string name = TextBox2.Text; DateTime time = DateTime.Now; if (FileUpload1.PostedFile.InputStream.Length < 1) { Label1.Text = "请选择文件"; return; } string FileName = FileUploa

sql server-SQL server 数据库@@Error变量值如何返回

问题描述 SQL server 数据库@@Error变量值如何返回 其cmd的sql语句为: private const string SQL_INSERT_ORDER = "Declare @ID int; Declare @ERR int; INSERT INTO Orders VALUES( @BillAddress1, @BillAddress2, @BillCity, @BillState, @BillZip, @BillCountry,(..省略若干值..) 'U'); SELECT

vs2010连接暑数据库问题

问题描述 vs2010连接暑数据库问题 代码如下,问题在代码后 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using

数据库分页方法

分页|数据|数据库 方法一: select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 10 = 每页记录数 20 = (当前页 + 1) * 每页记录数 以上语句即可以实现分页,但是最后取出的结果排序是升序,如果需要结果集为降序(例如时间),则有两种方法可以处理 1.使用以下语句,但效率可能要降低一些 selec