哪位能给这个ADO.NET的SQL Server引擎把事物控制和数据库更新,添加上去或修改!100分!

xiaotuhzb 2003-10-17 06:01:04
下面是一个数据访问的引擎,里面的查询部分都没有问题了,但是事物控制和数据库更新部分有问题,哪位知道是什么错误或则能添加上去吗?
using System;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using Atu;
using System.Diagnostics;

namespace Atu.DataModules
{
/// <summary>
/// DataModule 的摘要说明。
/// </summary>

public class DMSqlServer
{
// INI文件名
private string IniFileName = "";
private string Section = "";
private string ConnectionString = "";

#region 数据库连接引擎的配置参数声明
private string data_source;
private string initial_catalog;
private string integrated_security;
private string persist_security_info;
private string user_id;
private string workstation_id;
private string packet_size;
private string password;
private string connect_timeout;
#endregion

#region 数据库操作的数据控件声明

private SqlConnection baseConnection;
private SqlTransaction baseTransaction;
private SqlCommand baseCommand;
private BindingContext bindingContext;
private SqlDataAdapter baseDataAdapter;

#endregion

public DMSqlServer()
{
// 初始化
InitDMSqlServer();
}

public DMSqlServer(string IniFileName, string Section)
{
// 设置读取配置文件属性
this.IniFileName = IniFileName;
this.Section = Section;
// 初始化
InitDMSqlServer();
}

public DMSqlServer(string ConnectionString)
{
// 设置连接属性
this.ConnectionString = ConnectionString;
// 初始化
InitDMSqlServer();
}

public void InitDMSqlServer()
{
try
{
// 初始化连接属性
SetConnectionString();
// 创建连接对象并打开它
baseConnection = new SqlConnection(ConnectionString);
baseConnection.Open();
baseCommand = new SqlCommand();
bindingContext = new BindingContext();
baseDataAdapter = new SqlDataAdapter();
baseCommand.Connection = baseConnection;
}
catch
{
MessageBox.Show( "数据库连接失败!","信息",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}

#region 记录/读取程序设置
//Windows方式
private void LoadIniWindows()
{
data_source = Atu.Ini.IniReadValue (IniFileName, Section, "data_source");
initial_catalog = Atu.Ini.IniReadValue (IniFileName, Section, "initial_catalog");
integrated_security = Atu.Ini.IniReadValue (IniFileName, Section, "integrated_security");
persist_security_info = Atu.Ini.IniReadValue (IniFileName, Section, "persist_security_info");
user_id = Atu.Ini.IniReadValue (IniFileName, Section, "user_id");
workstation_id = Atu.Ini.IniReadValue (IniFileName, Section, "workstation_id");
packet_size = Atu.Ini.IniReadValue (IniFileName, Section, "packet_size");
connect_timeout = Atu.Ini.IniReadValue (IniFileName, Section, "connect_timeout");

}
//SqlServer方式
private void LoadIniSqlServer()
{
workstation_id = Atu.Ini.IniReadValue(IniFileName,Section,"workstation_id");
data_source = Atu.Ini.IniReadValue(IniFileName,Section,"data_source");
initial_catalog = Atu.Ini.IniReadValue(IniFileName,Section,"initial_catalog");
packet_size = Atu.Ini.IniReadValue(IniFileName,Section,"packet_size");
password = Atu.Ini.IniReadValue(IniFileName,Section,"password");
persist_security_info = Atu.Ini.IniReadValue(IniFileName,Section,"persist_security_info");
user_id = Atu.Ini.IniReadValue(IniFileName,Section,"user_id");
connect_timeout = Atu.Ini.IniReadValue (IniFileName, Section, "connect_timeout");
}


#endregion

//设置Ini文件的位置
private void SetIniFileName()
{
if (IniFileName == "") IniFileName = Application.StartupPath + "\\Ini.ini";
}

//设置Ini文件的Section
private string SetIniSectionSqlServerConnection()
{
if (Section == "") Section = "Connection1";
return Section;
}
private string SetIniSectionWindowsConnection()
{
if (Section == "") Section = "WindowsConnection";
return Section;
}

#region 创建连接字符串
public void SetConnectionString()
{

if ( Section == "WindowsConnection")
{
SetIniFileName();
LoadIniWindows();
ConnectionString = "workstation id="+ workstation_id +";"+
"packet size="+ packet_size+";"+
"user id=" + user_id +";"+
"integrated security="+ integrated_security +";"+
"data source=" + data_source +";"+
"persist security info=" + persist_security_info+";"+
"initial catalog=" + initial_catalog +";"+
"Connect Timeout="+connect_timeout;

}
else
{
SetIniSectionSqlServerConnection();
SetIniFileName();
LoadIniSqlServer();
ConnectionString = "workstation id="+ workstation_id +";"+
"packet size="+ packet_size+";"+
"user id=" + user_id +";"+
"data source=" + data_source +";"+
"persist security info=" + persist_security_info+";"+
"initial catalog=" + initial_catalog +";"+
"password=" + password+";"+
"initial catalog=" + initial_catalog +";"+
"Connect Timeout="+connect_timeout;
}
}
#endregion
...全文
72 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaotuhzb 2003-10-19
  • 打赏
  • 举报
回复
难道这个问题就没有能解决吗?郁闷!
xiaotuhzb 2003-10-18
  • 打赏
  • 举报
回复
这是写的类,要冲其他的地方调用,我可以把原码发给你!能留下的email吗?
rgbcn 2003-10-17
  • 打赏
  • 举报
回复
事务处理,你怎么都没有调用,被你注释掉了

上面的baseDataAdapter 应该要改成 TmpDataAdapter

我看不太清楚,你自己再试试
rgbcn 2003-10-17
  • 打赏
  • 举报
回复
更新数据库要加条语句

SqlCommandBuilder builder = new SqlCommandBuilder(baseDataAdapter);

你找找 SqlCommandBuilder 的用法
xiaotuhzb 2003-10-17
  • 打赏
  • 举报
回复
如果觉得分不够,我还可以送分!
rgbcn 2003-10-17
  • 打赏
  • 举报
回复
webmaster@rgbcn.com
fgyAdmin 2003-10-17
  • 打赏
  • 举报
回复
fgysa@163.com
xiaotuhzb 2003-10-17
  • 打赏
  • 举报
回复
哪位觉得看不清楚,留下email我给你发过来!
xiaotuhzb 2003-10-17
  • 打赏
  • 举报
回复
INi文件控制函数如下:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using Atu;

namespace Atu
{
/// <summary>
/// Ini 的摘要说明。
/// </summary>
public class Ini
{
// INI文件名
private string FileName;

public Ini(string FileName)
{
this.FileName = FileName;
}

// 声明写INI文件的API函数
[DllImport("kernel32")]
public static extern long WritePrivateProfileString(string section,string key,string val,string filePath);

// 声明读INI文件的API函数
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key, string def, StringBuilder retVal,int size,string filePath);

// 写INI文件
public static void IniWriteValue(string FileName, string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, FileName);
}

public void IniWriteValue(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, this.FileName);
}

// 读取INI文件
public static string IniReadValue(string FileName, string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
GetPrivateProfileString(Section, Key, "无法读取对应数值!", temp, 255, FileName);
return temp.ToString();
}

public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
GetPrivateProfileString(Section,Key,"无法读取对应数值!",temp,255,this.FileName);
return temp.ToString();
}
}
}
xiaotuhzb 2003-10-17
  • 打赏
  • 举报
回复
#region 查询数据

public void SelectData(SqlDataAdapter DataAdapter, string CommandText, string TableName)
{
baseCommand.Connection = baseConnection;
baseCommand.CommandText = CommandText;
DataAdapter.SelectCommand = baseCommand;
if (TableName != "") DataAdapter.TableMappings.Add("Table", TableName);
baseConnection.Close();
}

public void SelectData(SqlDataAdapter DataAdapter, string CommandText)
{
SelectData(DataAdapter, CommandText, "");
}

public void SelectData(DataSet DataSet, string CommandText, string TableName)
{
SelectData(baseDataAdapter, CommandText, TableName);
if (TableName == "")
{
baseDataAdapter.Fill(DataSet);
}
else
{
baseDataAdapter.Fill(DataSet, TableName);
}
}

public void SelectData(DataSet DataSet, string CommandText)
{
SelectData(DataSet, CommandText, "");
}

public void SelectData(string xmlFileName, string CommandText, string TableName)
{
DataSet dataSet = new DataSet(TableName);
SelectData(dataSet, CommandText, TableName);
dataSet.WriteXml(xmlFileName);
dataSet.Dispose();
}

public void SelectData(string xmlFileName, string CommandText)
{
SelectData(xmlFileName, CommandText, "");
}
#endregion

#region 更新数据

public void UpdateData(string CommandText)
{
baseCommand.Connection = baseConnection;
baseCommand.CommandText = CommandText;
try
{
baseCommand.ExecuteNonQuery();
}
catch(SqlException ae)
{
MessageBox.Show(ae.Message.ToString());
}
}

public void UpdateData(DataSet MyDataSet, string MyTableName)
{
SqlDataAdapter TmpDataAdapter = new SqlDataAdapter("Select * From " + MyTableName, ConnectionString);

TmpDataAdapter.Update(MyDataSet, MyTableName);
}

public void UpdateData(SqlDataAdapter MyDataAdapter, DataSet MyDataSet, string MyTableName)
{
MyDataAdapter.Update(MyDataSet, MyTableName);
}

#endregion

#region 事务控制
     //开始执行事务
public void TransactionBegin()
{
baseTransaction = baseConnection.BeginTransaction();
baseCommand.Transaction = baseTransaction;  
}
//执行事物
public void TransactionExecute(string CommandText)
{
//TransactionBegin();
try
{
baseCommand.CommandText = CommandText;
baseCommand.ExecuteNonQuery();
//baseTransaction.Commit();
}
catch
{
baseTransaction.Rollback();
//MessageBox.Show( "输入有错误,请重新输入!","信息",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
baseConnection.Close();
}

//baseCommand.CommandText = CommandText;
//int testcount = baseCommand.ExecuteNonQuery();  
}
//完成事务
public void TransactionCommit()
{
baseTransaction.Commit();
}
     //取消事务
public void TransactionRollback()
{
baseTransaction.Rollback();
}
#endregion

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧