我的调用存贮过程的代码错在哪呢?请大家帮看一下?
第一次学着写c#调用存贮过程,就是报错,我无计可施了,错在哪里呢?
存贮过程的参数如下:
ALTER proc gjj_公积金查询
@yuefen_begin varchar(6),
@yuefen_end varchar(6),
@flag_mxhj int =0 , -- 0-按合计查询,1-按明细查询
@flag_drbj int =0 , -- 0-查全部,1-只查工资导入的,2-只查手工录入的
@strmsg varchar(100)='' output
as
我的c#代码如下:namespace gongjijin
{
class clsgjj
{
//private SqlDataReader dataReader = null; //dataRader 对象
private SqlCommand command = null; //命令对象
private DataSet MyDataSet = null; //dataset对象
private SqlDataAdapter MyDataAdapter = null; //dataadapter对象
private string progName = "";
clsdb mydb;
//private string strsql; //登录类初始化(将全局连接对象传进来)
public void clsgjjInit()
{
mydb = clsdb.Instance();
command = new SqlCommand();
command.Connection = mydb.conn;
MyDataSet = new DataSet();
} //通过存贮过程,查询公积金
public int Getgjj(string yfBegin,string yfEnd,int iFlagHj,int iFlagFilter)
{
progName ="gjj_公积金查询"; //存贮过程名称 command = new SqlCommand();
command.Connection = mydb.conn; command.CommandType = CommandType.StoredProcedure;
command.CommandText = progName; command.Parameters.Add(new SqlParameter("@yuefen_begin", SqlDbType.VarChar.ToString()));
command.Parameters["@yuefen_begin"].Value = yfBegin; command.Parameters.Add(new SqlParameter("@yuefen_end", SqlDbType.VarChar.ToString()));
command.Parameters["@yuefen_end"].Value = yfEnd; command.Parameters.Add(new SqlParameter("@flag_mxhj", SqlDbType.Int));
command.Parameters["@flag_mxhj"].Value = iFlagHj; command.Parameters.Add(new SqlParameter("@flag_drbj", SqlDbType.Int));
command.Parameters["@flag_drbj"].Value = iFlagFilter; command.Parameters.Add(new SqlParameter("@strmsg", SqlDbType.VarChar.ToString()));
command.Parameters["@strmsg"].Direction = ParameterDirection.Output; command.ExecuteNonQuery();
MyDataAdapter.SelectCommand = command;
//if (MyDataSet != null)
//{
// MyDataAdapter.Fill(MyDataSet, "table");
//} //DataGrid1.DataSource = MyDataSet;
//DataGrid1.DataBind(); MessageBox.Show(command.Parameters["@strmsg"].Value.ToString()); return 0;
}
}
}
执行到以下两句就执行不下去了
command.ExecuteNonQuery();
MyDataAdapter.SelectCommand = command;
第一次学着写c#调用存贮过程,就是报错,我无计可施了,错在哪里呢?
存贮过程的参数如下:
ALTER proc gjj_公积金查询
@yuefen_begin varchar(6),
@yuefen_end varchar(6),
@flag_mxhj int =0 , -- 0-按合计查询,1-按明细查询
@flag_drbj int =0 , -- 0-查全部,1-只查工资导入的,2-只查手工录入的
@strmsg varchar(100)='' output
as
我的c#代码如下:namespace gongjijin
{
class clsgjj
{
//private SqlDataReader dataReader = null; //dataRader 对象
private SqlCommand command = null; //命令对象
private DataSet MyDataSet = null; //dataset对象
private SqlDataAdapter MyDataAdapter = null; //dataadapter对象
private string progName = "";
clsdb mydb;
//private string strsql; //登录类初始化(将全局连接对象传进来)
public void clsgjjInit()
{
mydb = clsdb.Instance();
command = new SqlCommand();
command.Connection = mydb.conn;
MyDataSet = new DataSet();
} //通过存贮过程,查询公积金
public int Getgjj(string yfBegin,string yfEnd,int iFlagHj,int iFlagFilter)
{
progName ="gjj_公积金查询"; //存贮过程名称 command = new SqlCommand();
command.Connection = mydb.conn; command.CommandType = CommandType.StoredProcedure;
command.CommandText = progName; command.Parameters.Add(new SqlParameter("@yuefen_begin", SqlDbType.VarChar.ToString()));
command.Parameters["@yuefen_begin"].Value = yfBegin; command.Parameters.Add(new SqlParameter("@yuefen_end", SqlDbType.VarChar.ToString()));
command.Parameters["@yuefen_end"].Value = yfEnd; command.Parameters.Add(new SqlParameter("@flag_mxhj", SqlDbType.Int));
command.Parameters["@flag_mxhj"].Value = iFlagHj; command.Parameters.Add(new SqlParameter("@flag_drbj", SqlDbType.Int));
command.Parameters["@flag_drbj"].Value = iFlagFilter; command.Parameters.Add(new SqlParameter("@strmsg", SqlDbType.VarChar.ToString()));
command.Parameters["@strmsg"].Direction = ParameterDirection.Output; command.ExecuteNonQuery();
MyDataAdapter.SelectCommand = command;
//if (MyDataSet != null)
//{
// MyDataAdapter.Fill(MyDataSet, "table");
//} //DataGrid1.DataSource = MyDataSet;
//DataGrid1.DataBind(); MessageBox.Show(command.Parameters["@strmsg"].Value.ToString()); return 0;
}
}
}
执行到以下两句就执行不下去了
command.ExecuteNonQuery();
MyDataAdapter.SelectCommand = command;
以下是我写的一点小片断应该对你有用try
{
DataSet ds = new DataSet();
SqlCommand comm = new SqlCommand(tranName,conn);
comm.Parameters.AddRange(paras);
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = comm;
adapter.Fill(ds);
return ds.Tables[0];
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
{
try
{
DataSet ds = new DataSet();
SqlCommand comm = new SqlCommand(tranName,conn);
comm.Parameters.AddRange(paras);
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = comm;
adapter.Fill(ds);
return ds.Tables[0];
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
} }
-----------------------------------------------------------
不是的,这个肯定连接了。我是通过类clsdb进行连接的。
clsdb 是一个长连接的数据库类,启动程序后就是长连接。command的连接就是 clsdb.conn,
conn是clsdb 类中的 sqlconnection 对象。
command.Connection = mydb.conn; command.CommandType = CommandType.StoredProcedure;
command.CommandText = progName;
以上代码对吗?这是我怀疑的地方,因为好多代码都不是这样的,
而是:
SqlCommand comm = new SqlCommand(tranName,conn);我不知我的写法对不对,现在没有环境,也试不出来。
command.Parameters.Add(new SqlParameter("@yuefen_begin", SqlDbType.VarChar ,6));
command.Parameters["@yuefen_begin"].Value = yfBegin; command.Parameters.Add(new SqlParameter("@yuefen_end", SqlDbType.VarChar,6));
command.Parameters["@yuefen_end"].Value = yfEnd; command.Parameters.Add(new SqlParameter("@flag_mxhj", SqlDbType.Int));
command.Parameters["@flag_mxhj"].Value = iFlagHj; command.Parameters.Add(new SqlParameter("@flag_drbj", SqlDbType.Int));
command.Parameters["@flag_drbj"].Value = iFlagFilter; command.Parameters.Add(new SqlParameter("@strmsg", SqlDbType.VarChar,100));
command.Parameters["@strmsg"].Direction = ParameterDirection.Output; command.ExecuteNonQuery();
怎么会想起来ToString呢?!╮(╯▽╰)╭