110,535
社区成员
发帖
与我相关
我的任务
分享
protected void btnUpdate_Click(object sender, EventArgs e)
{
DataTable dt = CreateTable();
DataRow dr = dt.NewRow();
dr["tid"] = "1";
dr["tname"] = "xxx";
dr["tupdate"] = DateTime.Now.ToString();
dt.Rows.Add(dr);
UpdateDemo(dt);
Response.Redirect("/Update.aspx");
}
private DataTable CreateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("tid", typeof(int));
dt.Columns.Add("tname", typeof(string));
dt.Columns.Add("tupdate", typeof(DateTime));
return dt;
}
private int UpdateDemo(DataTable dt)
{
string tableName = "testUpdate";
int res = 0;
using (SqlConnection sqlconn = new SqlConnection(strConn))
{
sqlconn.Open();
//事务
SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
dt.AcceptChanges();
foreach (DataRow dr in dt.Rows)
{
//所有行设为修改状态
dr.SetModified();
}
//为Adapter定位目标表
SqlCommand cmd = new SqlCommand("select * from " + tableName + " where 1=0", sqlconn, tran);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);
da.AcceptChangesDuringUpdate = false;
string upSql = @"UPDATE {0} SET [tname]=@tname
,[tupdate]=@tupdate
where tid=@tid ";
upSql = string.Format(upSql, tableName);
SqlCommand updatecmd = new SqlCommand(upSql);
//不修改源DataTable
updatecmd.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand = updatecmd;
da.UpdateCommand.Parameters.Add("@tname", SqlDbType.NVarChar, 50, "tname");
da.UpdateCommand.Parameters.Add("@tupdate", SqlDbType.DateTime, 8, "tupdate");
da.UpdateCommand.Parameters.Add("@tid", SqlDbType.Int, 4, "tid");//主键字段
da.UpdateBatchSize = 1000;
res = da.Update(dt);//报错位置
dt.AcceptChanges();
tran.Commit();
sqlconn.Close();
}
catch
{
tran.Rollback();
return -1;
}
}
return res;
}
USE [TestUpdate]
GO
/****** Object: Table [dbo].[testUpdate] Script Date: 11/29/2014 17:32:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[testUpdate](
[tid] [int] NOT NULL,
[tname] [nvarchar](50) NULL,
[tupdate] [datetime] NULL,
CONSTRAINT [PK_testUpdate] PRIMARY KEY CLUSTERED
(
[tid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO