odbccommand调用带输出的存储过程是什么格式?----高人帮帮。

liumj2001 2011-08-30 11:48:04
OdbcDataReader dr; //存放变量的数据
Database db = new Database();
db.ODBCOpen(connstr);
OdbcParameter[] prams = {
db.oMakeInParam("@StrSql",OdbcType.VarChar,5000,sqlstr),
db.oMakeInParam("@PageIndex",OdbcType.Int,16,ipage ),
db.oMakeInParam("@PageCount",OdbcType.Int,16,20),
db.oMakeInParam("@SortClause",OdbcType.NText,5000,"MA001"),
db.oMakeInParam("@Filter",OdbcType.NText,5000,"MA001"),
db.oMakeOutParam("@TotalNum",OdbcType.Int,16)
};
db.RunProc("exec Common_Sp_Pagination @StrSql=?,@PageIndex=?,@PageCount=?,@SortClause=?,@Filter=?,OUTPUT", prams, out dr);


上面这句跑不通啊。

怎么调用?
...全文
211 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gemini Dean 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qingyun1029 的回复:]
参考一下:

C#调用Oracle存储过程
[/Quote]
学习一下这个调用方法,测试过可行,你不凡试试。希望早点成功!
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
存储过程中也删除@TotalNum INT OUTPUT

我就没有办法得到总记录数了。
Gemini Dean 2011-09-14
  • 打赏
  • 举报
回复
存储过程中也删除@TotalNum INT OUTPUT --总记录条数
就不会出错吧,我估计是赋值有问题了

ParameterDirection.Input;
ParameterDirection.Output;
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
这个存储过程返回一个记录集,同时还返回总的行数。
1 通用分页存储过程说明
1.1 存储过程名称:Common_Sp_Pagination
1.2 存储过程代码:

ALTER PROC [dbo].[Common_Sp_Pagination]
@StrSql VARCHAR(MAX) ,
@PageIndex INT ,--当前页码
@PageCount INT ,--每页条数
@SortClause VARCHAR(100) ,--排序字段,不加“Order by”
@Filter VARCHAR(200) , --条件,可以为空,不加where
@TotalNum INT OUTPUT --总记录条数
AS
DECLARE @ExeSql VARCHAR(MAX)
DECLARE @OrderByStr VARCHAR(100)
DECLARE @StartRowIndex INT
DECLARE @EndRowIndex INT
SET @StartRowIndex = ( @PageIndex - 1 ) * @PageCount + 1
SET @EndRowIndex = @PageIndex * @PageCount



/*--条件筛选--*/
IF @Filter IS NOT NULL
AND @Filter <> ''
BEGIN
SET @StrSql = @StrSql + ' WHERE ' + @Filter
END

/*--排序--*/
IF @SortClause IS NOT NULL
AND @SortClause <> ''
BEGIN
SET @OrderByStr = ' order by ' + @SortClause
SET @ExeSql = ' SELECT * FROM (' + @StrSql
+ ') AS A where rowIndex between ' + CAST(@StartRowIndex AS VARCHAR)
+ ' And ' + CAST(@EndRowIndex AS VARCHAR) + ' ' + @OrderByStr

END
ELSE
BEGIN
SET @ExeSql = ' SELECT * FROM (' + @StrSql
+ ') AS A where rowIndex between ' + CAST(@StartRowIndex AS VARCHAR)
+ ' And ' + CAST(@EndRowIndex AS VARCHAR) + ' '
END

PRINT @StrSql
PRINT @ExeSql
/*---查询总数-*/
CREATE TABLE #temp ( TotalNum INT )
DECLARE @InsertTemp VARCHAR(max)
SET @InsertTemp = 'insert into #temp select count(*) from (' + @StrSql
+ ') as A'
--PRINT @InsertTemp
EXEC(@InsertTemp)
SELECT @TotalNum = TotalNum
FROM #temp
DROP TABLE #temp

/*--查询分页信息--*/
EXEC(@ExeSql)
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
public void RunProc(string procName, OdbcParameter[] prams, out OdbcDataReader dataReader)
{
OdbcCommand cmd = oCreateCommand(procName, prams);
dataReader = cmd.ExecuteReader();
//return (int)cmd.Parameters[5].Value;
}
jimh 2011-09-05
  • 打赏
  • 举报
回复
db.RunProc 里面是做什么的,把这个函数贴出来看看?
liumj2001 2011-09-05
  • 打赏
  • 举报
回复
我顶。
liumj2001 2011-08-30
  • 打赏
  • 举报
回复
删除输出变量后提示这个。

ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]过程或函数 'Common_Sp_Pagination' 需要参数 '@TotalNum',但未提供该参数。
liumj2001 2011-08-30
  • 打赏
  • 举报
回复
db.RunProc(Common_Sp_Pagination);

这样也不行。

ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]必须传递参数 6,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递
萧炎 2011-08-30
  • 打赏
  • 举报
回复
和sql一样的 LZ不妨看看sql的
qingYun1029 2011-08-30
  • 打赏
  • 举报
回复
什么错误?

贴出来看看。
qingYun1029 2011-08-30
  • 打赏
  • 举报
回复
c# DBF数据库导入导出实例 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.Odbc; using System.Data.SqlClient; namespace DbfExample { public partial class Form1 : Form { System.Data.Odbc.OdbcConnection conn; public Form1() { InitializeComponent(); } //导出数据 private void btnOut_Click(object sender, EventArgs e) { string connect = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\\; "; OdbcConnection myconn = new OdbcConnection(connect); string sqlt ="CREATE TABLE aa.DBF (cc int(10))"; myconn.Open(); OdbcCommand olec = new OdbcCommand(sqlt, myconn); try { int i = olec.ExecuteNonQuery(); MessageBox.Show("'" + i + "'success"); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { olec.Dispose(); myconn.Close(); } //string ole_connstring = @"Provider=microsoft.jet.oledb.5.0;Data Source=D:\;"; //System.Data.OleDb.OleDbConnection ole_conn = new System.Data.OleDb.OleDbConnection(ole_connstring); //try //{ // ole_conn.Open(); // System.Data.OleDb.OleDbCommand cmd1 = new System.Data.OleDb.OleDbCommand // ("Create Table TestTable (Field1 int, Field2 char(10),Field float(10,2))", // ole_conn); // System.Data.OleDb.OleDbCommand cmd2 = new System.Data.OleDb.OleDbCommand // ("Insert Into TestTable values (1,'Hello3',520.20)", ole_conn); // System.Data.OleDb.OleDbCommand cmd3 = new System.Data.OleDb.OleDbCommand // ("Insert Into TestTable values (2,'Hello4',18076.60)", ole_conn); // cmd1.ExecuteNonQuery(); // cmd2.ExecuteNonQuery(); // cmd3.ExecuteNonQuery(); //} //catch (Exception ex) //{ // MessageBox.Show(ex.Message); //} //finally //{ // ole_conn.Close(); //} } //导入数据 private void btnIn_Click(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { Bind(); } private void Bind() { try { conn = new System.Data.Odbc.OdbcConnection(); string table = @"C:\测试例子\Dbf\prepur.dbf"; string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; conn.ConnectionString = connStr; conn.Open(); string sql = @"select * from " + table; OdbcDataAdapter da = new OdbcDataAdapter(sql, conn); DataTable dt = new DataTable(); da.Fill(dt); this.dataGridView1.DataSource = dt.DefaultView; //MessageBox.Show(dt.Rows[0][0].ToString()); } catch { } finally { conn.Close(); } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { try { conn = new System.Data.Odbc.OdbcConnection(); string table = @"C:\测试例子\Dbf\table1.dbf"; string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; conn.ConnectionString = connStr; conn.Open(); string id = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); string sql = @"select * from " + table + " where id='" + id + "'"; OdbcDataAdapter da = new OdbcDataAdapter(sql, conn); DataTable dt = new DataTable(); da.Fill(dt); txtId.Text = id; txtName.Text = dt.Rows[0]["name"].ToString(); txtAddress.Text = dt.Rows[0]["address"].ToString(); } catch { } finally { conn.Close(); } } private void Add() { conn = new System.Data.Odbc.OdbcConnection(); string table = @"C:\temp\Dbf\table1.dbf"; string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; conn.ConnectionString = connStr; conn.Open(); OdbcCommand cmd = new OdbcCommand(); cmd.Connection = conn; string sql = "insert into " + table + " values('" + txtId.Text + "','" + txtName.Text + "','" + txtAddress.Text + "')"; cmd.CommandText = sql; cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); Bind(); } private void btnTOSQL_Click(object sender, EventArgs e) { try { string sql = "Insert Into dbftosql select * From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\\temp\\Dbf','select * from table1.dbf')"; SqlConnection con = new SqlConnection("server=.;database=labelprint;uid=sa;pwd=sa"); con.Open(); SqlCommand cmd = new SqlCommand(sql, con); cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }

110,536

社区成员

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

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

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