.net向SQLSERVER数据库表中一次更新1000条数据(不同ID)有什么好办法吗

.net向SQLSERVER数据库表中一次更新1000条数据(不同ID)有什么好办法吗,第1张

不用查询,首先foreach DataTable,然后使用List<string>去收集这些sql语句,update table_name set column1='' where id=DataTable[0][i]toString(), connectionopen()之后,挨个执行sql语句,最后close()数据库链接,我写的有点不规范,你按照这个步骤整理一下。还有一个办法是整理出一份类似string sqlwhere="id1','id2','id3','id4'" 然后使用where id in('"+sqlwhere+"')执行一条一句。

insert into tablename(colname1,colname2) values(1,2)

按照这种写法,指定你的字段即可,注意,未更新字段需要有默认值或不能限制不能为空

<%

'连接数据库 dbmdb是您的数据库文件

Set conn = ServerCreateObject("ADODBConnection")

connstr="Provider=MicrosoftJetOLEDB40;Data Source=" & ServerMapPath("dbmdb")

connopen connstr

'执行语句

connexecute "update [表名] set [列名]=值 where [id]=编号"

%>

如下面一个数据库

数据库文件名 123mdb

表名 userinfo

数据/列名 id username password

0 lorabit PiG!!!

1 paint DoG!!!

当paint用户需要更新其密码为PiG!!!时,我们就需要这样一段ASP

<%

'连接数据库 dbmdb是您的数据库文件

Set conn = ServerCreateObject("ADODBConnection")

connstr="Provider=MicrosoftJetOLEDB40;Data Source=" & ServerMapPath("123mdb")

connopen connstr

'执行语句

connexecute "update [userinfo] set [password]='PiG!!!' where [id]=1"

%>

你也可以使用下面这一段,两段的差别在于第一段是靠用户ID来确定行,而第二段是搜索用户名。

<%

'连接数据库 dbmdb是您的数据库文件

Set conn = ServerCreateObject("ADODBConnection")

connstr="Provider=MicrosoftJetOLEDB40;Data Source=" & ServerMapPath("123mdb")

connopen connstr

'执行语句

connexecute "update [userinfo] set [password]='PiG!!!' where [username]='paint'"

%>

如果还有不懂 QQ233349789

购买,不就是添加一条数据库信息么,你在添加成功之后更新一条被。是你更新的语句写错了吧?

既然你添加成功了,就说明你数据库打开成功,那也就是只有一种可能,你update写错了。或者是你要update的数据不存在。自己debug一下要update的数据在数据库中存在不存在,在看看update的执行结果是否成功。

//将数据库中的数据条数分段

public void division(){

//获取要导入的总的数据条数

String sql3="SELECT count() FROM [CMD][dbo][mycopy1]";

try {

pss=consprepareStatement(sql3);

rss=pssexecuteQuery();

while(rssnext()){

Systemoutprintln("总记录条数:"+rssgetInt(1));

sum=rssgetInt(1);

}

//每30000条记录作为一个分割点

if(sum>=30000){

n=sum/30000;

residue=sum%30000;

}else{

residue=sum;

}

Systemoutprintln(n+" "+residue);

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

线程类

public MyThread(int start,int end) {

thisend=end;

thisstart=start;

Systemoutprintln("处理掉余数");

try {

Systemoutprintln("--------"+ThreadcurrentThread()getName()+"------------");

ClassforName(SQLSERVERDRIVER);

Systemoutprintln("加载sqlserver驱动");

cons = DriverManagergetConnection(CONTENTS,UNS,UPS);

stas = conscreateStatement();

Systemoutprintln("连接SQLServer数据库成功!!");

Systemoutprintln("加载mysql驱动");

ClassforName(MYSQLDRIVER);

con = DriverManagergetConnection(CONTENT,UN,UP);

sta = concreateStatement();

// 关闭事务自动提交

consetAutoCommit(false);

Systemoutprintln("连接mysql数据库成功!!");

} catch (Exception e) {

eprintStackTrace();

}

// TODO Auto-generated constructor stub

}

public ArrayList<Member> getAll(){

Member member;

String sql1="select from (select row_number() over (order by pmcode) as rowNum," +

" from [CMD][dbo][mycopy1]) as t where rowNum between "+start+" and "+end;

try {

Systemoutprintln("正在获取数据");

allmembers=new ArrayList();

rss=stasexecuteQuery(sql1);

while(rssnext()){

member=new Member();

membersetAddress1(rssgetString("address1"));

membersetBnpoints(rssgetString("bnpoints"));

membersetDbno(rssgetString("dbno"));

membersetExpiry(rssgetString("expiry"));

membersetHispoints(rssgetString("hispoints"));

membersetKypoints(rssgetString("kypoints"));

membersetLevels(rssgetString("levels"));

membersetNames(rssgetString("names"));

membersetPmcode(rssgetString("pmcode"));

membersetRemark(rssgetString("remark"));

membersetSex(rssgetString("sex"));

membersetTelephone(rssgetString("telephone"));

membersetWxno(rssgetString("wxno"));

membersetPmdate(rssgetString("pmdate"));

allmembersadd(member);

// Systemoutprintln(membergetNames());

}

Systemoutprintln("成功获取sqlserver数据库数据!");

return allmembers;

} catch (SQLException e) {

// TODO Auto-generated catch block

Systemoutprintln("获取sqlserver数据库数据发送异常!");

eprintStackTrace();

}

try {

rssclose();

stasclose();

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return null;

}

public void inputAll(ArrayList<Member> allmembers){

Systemoutprintln("开始向mysql中写入");

String sql2="insert into testmycopy2 values (,,,,,,,,,,,,,)";

try {

ps=conprepareStatement(sql2);

Systemoutprintln("-------------------------等待写入数据条数: "+allmemberssize());

for(int i=0;i<allmemberssize();i++){

pssetString(1, allmembersget(i)getPmcode());

pssetString(2, allmembersget(i)getNames());

//Systemoutprintln(allmembersget(i)getNames());

pssetString(3, allmembersget(i)getSex());

pssetString(4, allmembersget(i)getTelephone());

pssetString(5, allmembersget(i)getAddress1());

pssetString(6, allmembersget(i)getPmdate());

pssetString(7, allmembersget(i)getExpiry());

pssetString(8, allmembersget(i)getLevels());

pssetString(9, allmembersget(i)getDbno());

pssetString(10, allmembersget(i)getHispoints());

pssetString(11, allmembersget(i)getBnpoints());

pssetString(12, allmembersget(i)getKypoints());

pssetString(13, allmembersget(i)getWxno());

pssetString(14, allmembersget(i)getRemark());

//插入命令列表

//psaddBatch();

psexecuteUpdate();

}

//psexecuteBatch();

concommit();

psclose();

conclose();

thisflag=false;

Systemoutprintln(ThreadcurrentThread()getName()+"--->OK");

} catch (SQLException e) {

// TODO Auto-generated catch block

Systemoutprintln("向mysql中更新数据时发生异常!");

eprintStackTrace();

}

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true&&flag){

thisinputAll(getAll());

}

}

需要将大量数据(大概5W条)插入MySQL数

据库,用普通的SQL

Statement执行,时间大概是几分钟。于是想到用PreparedStatement,但是改了之后发现效率并没有很大的提升。不成,想到了

load data local

infile命令,以前一直认为这条命令仅限MySQL终端上使用而不是标准的SQL语句,今天看了几篇文章之后有了很大的收获。

1 使用PreparedStatement batch operation

以前使用PreparedStatement性能没有很大提升的原因在于:

没有使用批处理方法

在语句执行之前应关闭事务自动提交,语句执行完之后再提交

public

void batchLoad(Connection connection)

{

try

{

connectionsetAutoCommit(false);

BufferedReader reader =

new BufferedReader(new

FileReader("tfacts_result"));

String sqlString =

"insert into test(node1, node2, weight) values(, , )";

PreparedStatement pstmt = connectionprepareStatement(sqlString);

String line =

null;

while(true)

{

line = readerreadLine();

if(line == null)

{

break;

}

String[] columns = linesplit("\t");

for(int

i = 1; i <= columnslength; i++)

{

pstmtsetString(i, columns[i-1]);

}

pstmtaddBatch();

}

pstmtexecuteBatch();

connectioncommit();

pstmtclose();

readerclose();

}

catch (FileNotFoundException e) {

eprintStackTrace();

}catch

(SQLException e){

eprintStackTrace();

}catch

(IOException e){

eprintStackTrace();

}

2使用load data local infile into tabel XXX(注意在文件中用\t将每列数据隔开)

public

void loadData(Connection connection)

{

long

starTime = SystemcurrentTimeMillis();

String sqlString =

"load data local infile into table test";

PreparedStatement pstmt;

try

{

pstmt = connectionprepareStatement(sqlString);

pstmtsetString(1,

"tfacts_result");

pstmtexecuteUpdate();

pstmtclose();

}

catch (SQLException e) {

eprintStackTrace();

}

long

endTime = SystemcurrentTimeMillis();

Systemoutprintln("program runs "

+ (endTime - starTime) + "ms");

}

测试了5W条数据,PreparedStatement耗时10s,而load data infile耗时3s。

以上就是关于.net向SQLSERVER数据库表中一次更新1000条数据(不同ID)有什么好办法吗全部的内容,包括:.net向SQLSERVER数据库表中一次更新1000条数据(不同ID)有什么好办法吗、SQl server 数据库 更新数据只更新一条数据后面几个字段怎么解决吗、asp如何更新一条数据库记录使用update等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9682958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存