public bool UpdateStation(String sid,String name,int level)
{
StationData stationdata;//StationData是DataSet的派生类
DataRow stationRow;
stationdata = new StationData();
stationRow = stationdata.Tables[StationData.STATION_TABLE].NewRow();
stationRow[StationData.SID_FIELD] = sid;
stationRow[StationData.NAME_FIELD] = name;
stationRow[StationData.LEVEL_FIELD] = level ;
stationdata.Tables[StationData.STATION_TABLE].Rows.Add (stationRow);
stationdata.AcceptChanges();
dsCommand.UpdateCommand = GetUpdateCommand();
dsCommand.Update(StationData, StationData.STATION_TABLE );
//上面一句调试时执行了,没有异常,但不能达到修改数据的目的
if ( StationData.HasErrors )
{
stationdata.Tables[StationData.STATION_TABLE ].GetErrors()[0].ClearErrors();
return false;
}
else
{
StationData.AcceptChanges();
return true;
}
} private SqlCommand GetUpdateCommand()
{
if ( updateCommand == null )
{
updateCommand = new SqlCommand("UpdateStation",new SqlConnection (InitConnectionString ));
//连接串经过测试是正确的,用来插入数据时能正确插入
updateCommand.CommandType = CommandType.StoredProcedure;
SqlParameterCollection sqlParams = updateCommand.Parameters;
sqlParams.Add(new SqlParameter(SID_PARM, SqlDbType.NVarChar,5));
sqlParams.Add(new SqlParameter(NAME_PARM, SqlDbType.NVarChar, 50));
sqlParams.Add(new SqlParameter(LEVEL_PARM, SqlDbType.Int));
//
sqlParams[SID_PARM].SourceColumn = StationData.SID_FIELD;
sqlParams[NAME_PARM].SourceColumn = StationData.NAME_FIELD;
sqlParams[LEVEL_PARM].SourceColumn = StationData.LEVEL_FIELD
}
return updateCommand;
}
以下是SQL Server上的存储过程
CREATE PROCEDURE UpdateStation
@sid NVARCHAR(5),
@name NVARCHAR(50),
@level int
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
UPDATE [Station]
SET [name]= @name,[level] = @level
WHERE [sid] = @sid
COMMIT TRANSACTION
RETURN 0
GO
{
StationData stationdata;//StationData是DataSet的派生类
DataRow stationRow;
stationdata = new StationData();
stationRow = stationdata.Tables[StationData.STATION_TABLE].NewRow();
stationRow[StationData.SID_FIELD] = sid;
stationRow[StationData.NAME_FIELD] = name;
stationRow[StationData.LEVEL_FIELD] = level ;
stationdata.Tables[StationData.STATION_TABLE].Rows.Add (stationRow);
stationdata.AcceptChanges();
dsCommand.UpdateCommand = GetUpdateCommand();
dsCommand.Update(StationData, StationData.STATION_TABLE );
//上面一句调试时执行了,没有异常,但不能达到修改数据的目的
if ( StationData.HasErrors )
{
stationdata.Tables[StationData.STATION_TABLE ].GetErrors()[0].ClearErrors();
return false;
}
else
{
StationData.AcceptChanges();
return true;
}
} private SqlCommand GetUpdateCommand()
{
if ( updateCommand == null )
{
updateCommand = new SqlCommand("UpdateStation",new SqlConnection (InitConnectionString ));
//连接串经过测试是正确的,用来插入数据时能正确插入
updateCommand.CommandType = CommandType.StoredProcedure;
SqlParameterCollection sqlParams = updateCommand.Parameters;
sqlParams.Add(new SqlParameter(SID_PARM, SqlDbType.NVarChar,5));
sqlParams.Add(new SqlParameter(NAME_PARM, SqlDbType.NVarChar, 50));
sqlParams.Add(new SqlParameter(LEVEL_PARM, SqlDbType.Int));
//
sqlParams[SID_PARM].SourceColumn = StationData.SID_FIELD;
sqlParams[NAME_PARM].SourceColumn = StationData.NAME_FIELD;
sqlParams[LEVEL_PARM].SourceColumn = StationData.LEVEL_FIELD
}
return updateCommand;
}
以下是SQL Server上的存储过程
CREATE PROCEDURE UpdateStation
@sid NVARCHAR(5),
@name NVARCHAR(50),
@level int
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
UPDATE [Station]
SET [name]= @name,[level] = @level
WHERE [sid] = @sid
COMMIT TRANSACTION
RETURN 0
GO
//stationdata.AcceptChanges(); dsCommand.UpdateCommand = GetUpdateCommand();
dsCommand.UpdateCommand = GetUpdateCommand(); dsCommand的定义如下
private SqlDataAdapter dsCommand;
最终通过
SqlDataAdapter 的Update来完成更新,数据库连接是在SqlDataAdapter在执行操作时打开的,是自动完成的
我的插入数据也采用这种方法,是正确的
我可能没有给大家说清楚,dsCommand的定义如下
private SqlDataAdapter dsCommand;