数据库更新操作失败,提交事务被回滚。希望高人指点
这是一个模仿pet shop做的winform程序,数据接口层代码如下
public string Insert(switch3 s3)
{
SqlParameter[] switch3Parms = GetSwitch3ParametersInsert();
SetSwitch3ParametersInsert(switch3Parms, s3);
using (SqlConnection conn = new SqlConnection(SQLHelper.CONN_STRING_NON_DTC))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
try
{
SQLHelper.ExecuteNonQuery(trans, CommandType.Text, SQL_INSERT_SWITCH3, switch3Parms);
trans.Commit();
return "ok";
}
catch
{
trans.Rollback();
return "failed";
}
}
}
}
private static SqlParameter[] GetSwitch3ParametersInsert()
{
SqlParameter[] parms = SQLHelper.GetCachedParameters(SQL_INSERT_SWITCH3);
if (parms == null)
{
parms = new SqlParameter[] {
//new SqlParameter(PARM_ID3, SqlDbType.Int,4),
new SqlParameter(PARM_SWITCHTYPE, SqlDbType.VarChar, 50),
new SqlParameter(PARM_LOCATION, SqlDbType.VarChar, 50),
new SqlParameter(PARM_IPADDRESS, SqlDbType.VarChar, 50),
new SqlParameter(PARM_OFFICEID, SqlDbType.Int,4),
new SqlParameter(PARM_SLOTCOUNT, SqlDbType.Int, 4),
new SqlParameter(PARM_INPUTPERSON,SqlDbType.VarChar,50),
new SqlParameter(PARM_INPUTPERSON,SqlDbType.SmallDateTime,4),
};
SQLHelper.CacheParameters(SQL_INSERT_SWITCH3, parms);
}
return parms;
}
private void SetSwitch3ParametersInsert(SqlParameter[] parms,switch3 s3)
{
parms[0].Value =s3.switchtype;
parms[1].Value =s3.location;
parms[2].Value =s3.ipaddress;
parms[3].Value =s3.officeid;
parms[4].Value =s3.slotcount;
parms[5].Value=s3.inputperson;
parms[6].Value=s3.inputtime;
}
实体层代码如下:
private int _id3;//3层id
private string _location;//设备位置
private string _switchtype;//交换机类型
private string _ipaddress;//IP地址
private int _officeid;//局Id
private int _slotcount;//槽位数量
private string _inputperson;//录入人
private DateTime _inputtime;//录入时间
public switch3()
{
//
// TODO: 在此处添加构造函数逻辑
//如果不给予参数,则建构的时候给予一个初始化变量
//这么做是为了查询的时候好知道那些东西是给赋值过的,而那些没有
_id3=0;
_officeid=0;
_slotcount=0;
_location="";
_switchtype="";
_ipaddress="";
_inputtime=new DateTime(1000,1,1);
_inputperson="";
}
/// <summary>
/// 这里重载构造函数,如果用户需要在建立一个对象的时候就给它所有属性赋值则使用这个构造函数
/// </summary>
/// <param name="id3">3层id</param>
/// <param name="location">物理位置</param>
/// <param name="switchtype">交换机类型</param>
/// <param name="ipaddress">ip地址</param>
/// <param name="officeid">局id</param>
/// <param name="slotcount">槽位数量</param>
public switch3(int id3,string location,string switchtype,string ipaddress,int officeid,int slotcount,string inputperson,DateTime inputtime)
{
this._id3=id3;
this._location=location;
this._ipaddress=ipaddress;
this._switchtype=switchtype;
this._officeid=officeid;
this._slotcount=slotcount;
this._inputperson=inputperson;
this._inputtime=inputtime;
}
//下面开始设置属性
public int id3
{
get { return _id3; }
set { _id3=value;}
}
public string location
{
get { return _location;}
set { _location=value;}
}
public string switchtype
{
get { return _switchtype;}
set { _switchtype=value;}
}
public string ipaddress
{
get { return _ipaddress;}
set { _ipaddress=value;}
}
public int officeid
{
get { return _officeid;}
set { _officeid=value;}
}
public int slotcount
{
get { return _slotcount;}
set { _slotcount=value;}
}
public string inputperson
{
get { return _inputperson;}
set {_inputperson=value;}
}
public DateTime inputtime
{
get { return _inputtime;}
set {_inputtime=value;}
}
sqlhelper里的sql语句代码如下:
public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connString)) {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null) {
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
下面的sqlhelper是微软提供的库,应该没有问题,请高人看看吧,已经忙了几天了,我的qq是12572250随时在线。等待救援