用C#更新SQLSERVER。
来源:互联网 发布:淘宝民族风女装 编辑:程序博客网 时间:2024/06/01 08:51
需求:SQLSERVER中有一张表需要被更新。
方法有三:
一,直接在SQL中操作。
二,在C#中编写函数,之后deploy到SQL中,SQL中再去调用这个函数。
三,直接在C#中对着数据库操作。
这三种方法由快到慢,能用一,不用二;能用二,不用三。
有个项目要用到web service,第二种方法deploy老是出错,也不知道为什么,于是只好用第三种。
以下例子从简,不包括webservice部分,涵盖要点:
1. 多线程操作(定义线程组,设置线程完毕触发事件,等待所有线程完毕)
2. dataset update回DB(为表设置主键)
3. 用计数器设置timeout(加Timer)
4. connection string 来自 configuration
以下分别为:
主程序 Program
线程程序threadtranslate
更新回程序updateback
配置文件config
先在BD中建10张临时表,把要更新的数据按模10插入这10张表中。
然后开10个线程分别对这10张表进行操作:先抓入dataset,再对row做update。
最后将10张表依次更新回原表。
另设计时器,防止超时,时间到了直接终止程序。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Threading;using System.Configuration;using System.Timers;namespace updatetest{ class Program { static public string strConn = ConfigurationManager.ConnectionStrings["constring"].ToString(); static public SqlConnection con = new SqlConnection(strConn); static TimeSpan waitTime = new TimeSpan(0, 1, 0); static public AutoResetEvent[] events = new AutoResetEvent[4]; static void Main(string[] args) { for (int j = 0; j < 4; j++) { events[j] = new AutoResetEvent(false); } con.Open(); DateTime dtstart = System.DateTime.Now; QueryandUpdate(); updateback.updateback.updatefunction(); DateTime dtend = System.DateTime.Now; Console.WriteLine("all spend: {0}", dtend - dtstart); Console.Read(); } public static void QueryandUpdate() { string sqlsplit = ""; for (int j = 0; j < 4; j++) { sqlsplit += " if exists (select * from dbo.sysobjects where id = object_id('translationtable" + j.ToString() + "')) drop table translationtable" + j.ToString() + " select top 100000 TimeKey,ltrim(rtrim(DayNumberOfWeek)) AS DayNumberOfWeek into translationtable" + j.ToString() + " from testupdate where TimeKey%4=" + j.ToString() + " ALTER TABLE translationtable" + j.ToString() + " ADD CONSTRAINT [PK_translationtable" + j.ToString() + "_IK] PRIMARY KEY CLUSTERED ([TimeKey] ASC)"; } //string sqlsplit = "exec usp_splitsurvey"; SqlCommand commandsplit = new SqlCommand(sqlsplit, con); int num; num = commandsplit.ExecuteNonQuery(); con.Close(); System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 60000; timer.Elapsed += new ElapsedEventHandler(OnTime); timer.Enabled = true; timer.Start(); Thread[] thread = new Thread[4]; for (int j = 0; j < 4; j++) { thread[j] = new Thread(run); thread[j].Start(j); } WaitHandle.WaitAll(events); } public static void run(object i) { threadtranslate.threadtranslate.th((int)i); events[(int)i].Set(); } public static void OnTime(Object source, ElapsedEventArgs e) { Console.WriteLine("Timeout"); Console.Read(); System.Diagnostics.Process.GetCurrentProcess().Kill(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;namespace threadtranslate{ public class threadtranslate { static public void th(int i) { string constr = ConfigurationManager.ConnectionStrings["constring"].ToString(); SqlConnection conn = new SqlConnection(constr); conn.Open(); DateTime dtstart = System.DateTime.Now; DataSet ds = new DataSet(); SqlDataAdapter da; string sql = "select * from translationtable" + i.ToString(); da = new SqlDataAdapter(sql, conn); SqlCommandBuilder cb1 = new SqlCommandBuilder(da); da.Fill(ds, "translationtable"); for (int retrycount = 0; retrycount < 3; retrycount++) { foreach (DataRow therow1 in ds.Tables["translationtable"].Select("DayNumberOfWeek<9")) { string ch = therow1["DayNumberOfWeek"].ToString(); therow1["DayNumberOfWeek"] = "1" + ch; } } da.Update(ds, "translationtable"); conn.Close(); DateTime dtend = System.DateTime.Now; Console.WriteLine("thread" + i.ToString() + " spend: {0}", dtend - dtstart); //Console.Read(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;namespace updateback{ public class updateback { static public void updatefunction() { string constr = ConfigurationManager.ConnectionStrings["constring"].ToString(); SqlConnection conn = new SqlConnection(constr); conn.Open(); string sql = ""; for (int j = 0; j < 4; j++) { sql += " update f set f.DayNumberOfWeek = translationtable" + j.ToString() + ".DayNumberOfWeek from testupdate f inner join translationtable" + j.ToString() + " on f.TimeKey=translationtable" + j.ToString() + ".TimeKey " + " drop table translationtable" + j.ToString(); } SqlCommand command = new SqlCommand(sql, conn); int num; num = command.ExecuteNonQuery(); conn.Close(); } }}
<?xml version="1.0" encoding="utf-8" ?><configuration><system.serviceModel><bindings><basicHttpBinding><binding name="BasicHttpBinding_LanguageService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"><readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /><security mode="None"><transport clientCredentialType="None" proxyCredentialType="None" realm="" /><message clientCredentialType="UserName" algorithmSuite="Default" /></security></binding></basicHttpBinding></bindings><client><endpoint address="http://api.microsofttranslator.com/V2/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService" contract="BingLanguageService.LanguageService" name="BasicHttpBinding_LanguageService" /></client></system.serviceModel><connectionStrings><add name="constring" connectionString= "Data Source=SIEGE;Initial Catalog=Payne;Integrated Security=True" providerName="System.Data.SqlClient"/></connectionStrings></configuration>
- 用C#更新SQLSERVER。
- C#更新SQLServer中的TimeStamp字段(时间戳)
- C#通过SqlConnection连接查询更新等操作Sqlserver数据库
- 用 C# 连接SQLSERVER 数据库
- C# sqlserver
- sqlserver连表更新
- SQLServer触发器递归更新
- sqlserver关联更新问题
- sqlserver(持续更新)
- 用C#编写SQLServer自定义函数
- sqlserver级联更新和删除c#调用存储过程返回值
- sqlserver 链接服务器 用远程表更新本地数据表失败
- SQLServer用存储过程实现插入更新数据
- SqlServer联表更新,统计更新
- C#连接sqlserver代码
- c# sqlserver 连接
- C#与sqlServer数据库连接
- Excel 导入sqlserver c#
- 转:小波函数介绍(wden)
- 《修改代码的艺术》文摘
- 也许,活着就是这样
- 我的未来不是梦
- C++ 技术知识点 (1)
- 用C#更新SQLSERVER。
- 读书笔记001:托尼.巴赞之开动大脑
- Python的SimpleHTTPServer
- phpcms2008 系统结构
- Android的APK包里的文件类型都是什么?
- phpcms2008 模块结构
- Ruby/Rails 在线电子文档收集
- 将数据传回前一个Activity
- phpcms2008 模块扩展形式