最近重新温习设计模式,把以前写到一个SQLHELPER封装ADO.NET的类库重新看了一下,发现好多可以重新设计的地方,看来以前功力不够呀,于是重新再重构一下,花的时间不多,看上去还比较满意,拿来作为自己以后敏捷开发用的控件之一。
由于公司现在问开发到不少工具都用到该类库,但是却不怎么方便,主要是因为公司产品使用到是两个不同到数据库连接到原因,不能使用一个SQLHELPER,要实例化两个对象,于是又花来点时间去把SQLHELPER类封装成一个自定义控件,看上去用起来不错,于是想调用一下同事写的额度系统的存储过程,结果问题来了。主要调用ExcuteDateTable去运行一个StoredProcedure 返回一个DataTable
public DataTable ExecuteDataTable(DbCommand cmd)
{
DbDataAdapter dbDataAdapter = CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataTable dataTable = new DataTable();
dbDataAdapter.Fill(dataTable);
return dataTable;
}
由于自己偷懒,而且公司产品一贯使用Odbc连接方式,于是使用ODBC.NET连接到来SQL SERVER,去调用该存储过程,发现怎么调用都说参数没有定义,为了确定不是StoredProcedure 到原因,觉得先调用一下SP_HELP的系统存储过程看看是否成功,用SQL Profiler侦查发现发送到后台到都是不带参数的,怎么看程序也没有错误,很是郁闷,只好去查一下MSDN,无奈公司网络访问MSDN竟然长达10分钟,抛出一个代理错误无法访问,无语ing。
由于公司现在问开发到不少工具都用到该类库,但是却不怎么方便,主要是因为公司产品使用到是两个不同到数据库连接到原因,不能使用一个SQLHELPER,要实例化两个对象,于是又花来点时间去把SQLHELPER类封装成一个自定义控件,看上去用起来不错,于是想调用一下同事写的额度系统的存储过程,结果问题来了。主要调用ExcuteDateTable去运行一个StoredProcedure 返回一个DataTable
public DataTable ExecuteDataTable(DbCommand cmd)
{
DbDataAdapter dbDataAdapter = CreateDataAdapter();
dbDataAdapter.SelectCommand = cmd;
DataTable dataTable = new DataTable();
dbDataAdapter.Fill(dataTable);
return dataTable;
}
由于自己偷懒,而且公司产品一贯使用Odbc连接方式,于是使用ODBC.NET连接到来SQL SERVER,去调用该存储过程,发现怎么调用都说参数没有定义,为了确定不是StoredProcedure 到原因,觉得先调用一下SP_HELP的系统存储过程看看是否成功,用SQL Profiler侦查发现发送到后台到都是不带参数的,怎么看程序也没有错误,很是郁闷,只好去查一下MSDN,无奈公司网络访问MSDN竟然长达10分钟,抛出一个代理错误无法访问,无语ing。
程序调用调用方法为
DbCommand cmd = this.dataBaseControl1.GetStoredProcCommond("SP_HELP");
this.dataBaseControl1.AddInParameter(cmd, "@objname", DbType.String, "BASE");
this.dataGridView1.DataSource = this.dataBaseControl1.ExecuteDataTable(cmd);
花费N长时间,没有查出问题,晚上回家后自己建立来一个连接,使用System.Data.Sqlclient调用,竟然一用就成功,晕死,于是上网查MSDN,才知道竟然ODBC.net在调用存储过程中不支持参数调用,又无语ing,特别记录下来,便于以后查询。
代码就不贴了,网络上太多到DBHELPER例子,郁闷的是竟然花费自己那么多时间去查才知道。
下面是MSDN到部分摘录,再次鄙视公司网络。
OdbcCommand.CommandText 属性
备注
DbCommand cmd = this.dataBaseControl1.GetStoredProcCommond("SP_HELP");
this.dataBaseControl1.AddInParameter(cmd, "@objname", DbType.String, "BASE");
this.dataGridView1.DataSource = this.dataBaseControl1.ExecuteDataTable(cmd);
花费N长时间,没有查出问题,晚上回家后自己建立来一个连接,使用System.Data.Sqlclient调用,竟然一用就成功,晕死,于是上网查MSDN,才知道竟然ODBC.net在调用存储过程中不支持参数调用,又无语ing,特别记录下来,便于以后查询。
代码就不贴了,网络上太多到DBHELPER例子,郁闷的是竟然花费自己那么多时间去查才知道。
下面是MSDN到部分摘录,再次鄙视公司网络。
OdbcCommand.CommandText 属性
备注
当 CommandType 属性设置成 StoredProcedure 时,应该使用标准的 ODBC 存储过程转义序列来设置 CommandText 属性。将 CommandText 设置成存储过程名称的作用并不像此操作对于其他 .NET Framework 数据提供程序那样。
如果 CommandType 设置为 Text,ODBC.NET 提供程序就不支持命名的参数,该参数用于将参数传递给由 OdbcCommand 调用的 SQL 语句或存储过程。在这种情况下,必须使用问号 (?) 占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
浙公网安备 33010602011771号