使用Command执行存储过程
2003-10-13 00:02
441 查看
调用存储过程时,要设置Command对象的CommandType属性为StoreProcedure。一旦设定了CommandType属性为StoreProcedure,你就可以使用Parameters集合来定义参数,就像下面的例子。 注意使用OdbcCommand调用存储过程时要求提供完整的ODBCCALL语法。 SqlClient[VisualBasic] DimnwindConnAsSqlConnection=NewSqlConnection("DataSource=localhost;IntegratedSecurity=SSPI;"&_ "InitialCatalog=northwind") DimsalesCMDAsSqlCommand=NewSqlCommand("SalesByCategory",nwindConn) salesCMD.CommandType=CommandType.StoredProcedure DimmyParmAsSqlParameter=salesCMD.Parameters.Add("@CategoryName",SqlDbType.NVarChar,15) myParm.Value="Beverages" nwindConn.Open() DimmyReaderAsSqlDataReader=salesCMD.ExecuteReader() Console.WriteLine("{0},{1}",myReader.GetName(0),myReader.GetName(1)) DoWhilemyReader.Read() Console.WriteLine("{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)) Loop myReader.Close() nwindConn.Close() [C#] SqlConnectionnwindConn=newSqlConnection("DataSource=localhost;IntegratedSecurity=SSPI;InitialCatalog=northwind"); SqlCommandsalesCMD=newSqlCommand("SalesByCategory",nwindConn); salesCMD.CommandType=CommandType.StoredProcedure; SqlParametermyParm=salesCMD.Parameters.Add("@CategoryName",SqlDbType.NVarChar,15); myParm.Value="Beverages"; nwindConn.Open(); SqlDataReadermyReader=salesCMD.ExecuteReader(); Console.WriteLine("{0},{1}",myReader.GetName(0),myReader.GetName(1)); while(myReader.Read()) { Console.WriteLine("{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)); } myReader.Close(); nwindConn.Close(); OleDb[VisualBasic] DimnwindConnAsOleDbConnection=NewOleDbConnection("Provider=SQLOLEDB;DataSource=localhost;IntegratedSecurity=SSPI;"&_ "InitialCatalog=northwind") DimsalesCMDAsOleDbCommand=NewOleDbCommand("SalesByCategory",nwindConn) salesCMD.CommandType=CommandType.StoredProcedure DimmyParmAsOleDbParameter=salesCMD.Parameters.Add("@CategoryName",OleDbType.VarChar,15) myParm.Value="Beverages" nwindConn.Open() DimmyReaderAsOleDbDataReader=salesCMD.ExecuteReader() Console.WriteLine("{0},{1}",myReader.GetName(0),myReader.GetName(1)) DoWhilemyReader.Read() Console.WriteLine("{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)) Loop myReader.Close() nwindConn.Close() [C#] OleDbConnectionnwindConn=newOleDbConnection("Provider=SQLOLEDB;DataSource=localhost;IntegratedSecurity=SSPI;"+ "InitialCatalog=northwind"); OleDbCommandsalesCMD=newOleDbCommand("SalesByCategory",nwindConn); salesCMD.CommandType=CommandType.StoredProcedure; OleDbParametermyParm=salesCMD.Parameters.Add("@CategoryName",OleDbType.VarChar,15); myParm.Value="Beverages"; nwindConn.Open(); OleDbDataReadermyReader=salesCMD.ExecuteReader(); Console.WriteLine("/t{0},{1}",myReader.GetName(0),myReader.GetName(1)); while(myReader.Read()) { Console.WriteLine("/t{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)); } myReader.Close(); nwindConn.Close(); Odbc[VisualBasic] DimnwindConnAsOdbcConnection=NewOdbcConnection("Driver={SQLServer};Server=localhost;Trusted_Connection=yes;"&_ "Database=northwind") nwindConn.Open() DimsalesCMDAsOdbcCommand=NewOdbcCommand("{CALLSalesByCategory(?)}",nwindConn) salesCMD.CommandType=CommandType.StoredProcedure DimmyParmAsOdbcParameter=salesCMD.Parameters.Add("@CategoryName",OdbcType.VarChar,15) myParm.Value="Beverages" DimmyReaderAsOdbcDataReader=salesCMD.ExecuteReader() Console.WriteLine("{0},{1}",myReader.GetName(0),myReader.GetName(1)) DoWhilemyReader.Read() Console.WriteLine("{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)) Loop myReader.Close() nwindConn.Close() [C#] OdbcConnectionnwindConn=newOdbcConnection("Driver={SQLServer};Server=localhost;Trusted_Connection=yes;"+ "Database=northwind"); nwindConn.Open(); OdbcCommandsalesCMD=newOdbcCommand("{CALLSalesByCategory(?)}",nwindConn); salesCMD.CommandType=CommandType.StoredProcedure; OdbcParametermyParm=salesCMD.Parameters.Add("@CategoryName",OdbcType.VarChar,15); myParm.Value="Beverages"; OdbcDataReadermyReader=salesCMD.ExecuteReader(); Console.WriteLine("/t{0},{1}",myReader.GetName(0),myReader.GetName(1)); while(myReader.Read()) { Console.WriteLine("/t{0},${1}",myReader.GetString(0),myReader.GetDecimal(1)); } myReader.Close(); nwindConn.Close(); 一个Parameter对象可以使用Parameter构造器创建,也可以通过调用Command对象的Parameters集合的Add方法创建。Parameters.Add方法的输入参数可以和构造器相同,也可以使用一个存在的Parameter对象。用System.DBNull.Value设置Parameter的值为空。 如果要设置Parameter为非一般的输入参数时,必须设置ParameterDirection属性为InputOutput,Output,或者ReturnValue。下面的例子演示了创建Input,Output,和ReturnValue参数的差别。 SqlClient[VisualBasic] DimsampleCMDAsSqlCommand=NewSqlCommand("SampleProc",nwindConn) sampleCMD.CommandType=CommandType.StoredProcedure DimsampParmAsSqlParameter=sampleCMD.Parameters.Add("RETURN_VALUE",SqlDbType.Int) sampParm.Direction=ParameterDirection.ReturnValue sampParm=sampleCMD.Parameters.Add("@InputParm",SqlDbType.NVarChar,12) sampParm.Value="SampleValue" sampParm=sampleCMD.Parameters.Add("@OutputParm",SqlDbType.NVarChar,28) sampParm.Direction=ParameterDirection.Output nwindConn.Open() DimsampReaderAsSqlDataReader=sampleCMD.ExecuteReader() Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)) DoWhilesampReader.Read() Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)) Loop sampReader.Close() nwindConn.Close() Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters("@OutputParm").Value) Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters("RETURN_VALUE").Value) [C#] SqlCommandsampleCMD=newSqlCommand("SampleProc",nwindConn); sampleCMD.CommandType=CommandType.StoredProcedure; SqlParametersampParm=sampleCMD.Parameters.Add("RETURN_VALUE",SqlDbType.Int); sampParm.Direction=ParameterDirection.ReturnValue; sampParm=sampleCMD.Parameters.Add("@InputParm",SqlDbType.NVarChar,12); sampParm.Value="SampleValue"; sampParm=sampleCMD.Parameters.Add("@OutputParm",SqlDbType.NVarChar,28); sampParm.Direction=ParameterDirection.Output; nwindConn.Open(); SqlDataReadersampReader=sampleCMD.ExecuteReader(); Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)); while(sampReader.Read()) { Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)); } sampReader.Close(); nwindConn.Close(); Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters["@OutputParm"].Value); Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters["RETURN_VALUE"].Value); OleDb[VisualBasic] DimsampleCMDAsOleDbCommand=NewOleDbCommand("SampleProc",nwindConn) sampleCMD.CommandType=CommandType.StoredProcedure DimsampParmAsOleDbParameter=sampleCMD.Parameters.Add("RETURN_VALUE",OleDbType.Integer) sampParm.Direction=ParameterDirection.ReturnValue sampParm=sampleCMD.Parameters.Add("@InputParm",OleDbType.VarChar,12) sampParm.Value="SampleValue" sampParm=sampleCMD.Parameters.Add("@OutputParm",OleDbType.VarChar,28) sampParm.Direction=ParameterDirection.Output nwindConn.Open() DimsampReaderAsOleDbDataReader=sampleCMD.ExecuteReader() Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)) DoWhilesampReader.Read() Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)) Loop sampReader.Close() nwindConn.Close() Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters("@OutputParm").Value) Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters("RETURN_VALUE").Value) [C#] OleDbCommandsampleCMD=newOleDbCommand("SampleProc",nwindConn); sampleCMD.CommandType=CommandType.StoredProcedure; OleDbParametersampParm=sampleCMD.Parameters.Add("RETURN_VALUE",OleDbType.Integer); sampParm.Direction=ParameterDirection.ReturnValue; sampParm=sampleCMD.Parameters.Add("@InputParm",OleDbType.VarChar,12); sampParm.Value="SampleValue"; sampParm=sampleCMD.Parameters.Add("@OutputParm",OleDbType.VarChar,28); sampParm.Direction=ParameterDirection.Output; nwindConn.Open(); OleDbDataReadersampReader=sampleCMD.ExecuteReader(); Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)); while(sampReader.Read()) { Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)); } sampReader.Close(); nwindConn.Close(); Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters["@OutputParm"].Value); Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters["RETURN_VALUE"].Value); Odbc[VisualBasic] DimsampleCMDAsOdbcCommand=NewOdbcCommand("{?=CALLSampleProc(?,?)}",nwindConn) sampleCMD.CommandType=CommandType.StoredProcedure DimsampParmAsOdbcParameter=sampleCMD.Parameters.Add("RETURN_VALUE",OdbcType.Int) sampParm.Direction=ParameterDirection.ReturnValue sampParm=sampleCMD.Parameters.Add("@InputParm",OdbcType.VarChar,12) sampParm.Value="SampleValue" sampParm=sampleCMD.Parameters.Add("@OutputParm",OdbcType.VarChar,28) sampParm.Direction=ParameterDirection.Output nwindConn.Open() DimsampReaderAsOdbcDataReader=sampleCMD.ExecuteReader() Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)) DoWhilesampReader.Read() Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)) Loop sampReader.Close() nwindConn.Close() Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters("@OutputParm").Value) Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters("RETURN_VALUE").Value) [C#] OdbcCommandsampleCMD=newOdbcCommand("{?=CALLSampleProc(?,?)}",nwindConn); sampleCMD.CommandType=CommandType.StoredProcedure; OdbcParametersampParm=sampleCMD.Parameters.Add("RETURN_VALUE",OdbcType.Int); sampParm.Direction=ParameterDirection.ReturnValue; sampParm=sampleCMD.Parameters.Add("@InputParm",OdbcType.VarChar,12); sampParm.Value="SampleValue"; sampParm=sampleCMD.Parameters.Add("@OutputParm",OdbcType.VarChar,28); sampParm.Direction=ParameterDirection.Output; nwindConn.Open(); OdbcDataReadersampReader=sampleCMD.ExecuteReader(); Console.WriteLine("{0},{1}",sampReader.GetName(0),sampReader.GetName(1)); while(sampReader.Read()) { Console.WriteLine("{0},{1}",sampReader.GetInt32(0),sampReader.GetString(1)); } sampReader.Close(); nwindConn.Close(); Console.WriteLine("@OutputParm:{0}",sampleCMD.Parameters["@OutputParm"].Value); Console.WriteLine("RETURN_VALUE:{0}",sampleCMD.Parameters["RETURN_VALUE"].Value); 在SqlCommand中使用参数在SqlCommand中使用参数时,参数的名字必须和存储过程中相应参数的名字匹配。SQLSERVER的.NETFrameworkDataProvider将存储过程中的参数视为命名参数并且搜索与之匹配的参数标记。SQLSERVER的.NETFrameworkDataProvider不支持使用问号标记(?)作为占位符来向SQL语句或者存储过程传递参数。既然如此,你必须命名参数,就下面一样: SELECT*FROMCustomersWHERECustomerID=@CustomerID 在OleDbCommand和OdbcCommand中使用参数在OleDbCommand或者OdbcCommand中使用参数时,参数添加到Parameters集合中的顺序必须和存储过程中参数定义的顺序匹配。OLEDB和ODBC的.NETFramework数据供应程序将存储过程的参数视为占位符,按照顺序来给参数赋值。另外,返回参数必须是第一个被加入到Parameters集合中的参数。OLEDB和ODBC的.NETFramework数据供应程序不提供使用命名参数来向SQL语句或存储过程传递参数。为此,你必须使用问号(?)占位符,就像下面一样: SELECT*FROMCustomersWHERECustomerID=? 因此,向Parameters集合添加Parameter对象的顺序必须直接对应于该参数的问号占位符的位置。 导出参数信息参数也可以使用CommandBuilder类从存储过程导出。SqlCommandBuilder和OleDbCommandBuilder类都提供了静态方法DeriveParameters,该静态方法将自动使用存储过程中的参数信息填充Command对象的Parameters集合。请注意,DeriveParameters将改写Command的任何现有参数信息。导出参数信息时需要经历一个到数据源的附加行程,以获取参数信息。如果参数信息在设计时是已知的,则可以通过显式设置参数来提高应用程序的性能。 以下代码示例显示如何使用CommandBuilder.DeriveParameters来填充Command对象的Parameters集合。 [VisualBasic] DimnwindConnAsSqlConnection=NewSqlConnection("DataSource=localhost;InitialCatalog=Northwind;IntegratedSecurity=SSPI;") DimsalesCMDAsSqlCommand=NewSqlCommand("SalesByYear",nwindConn) salesCMD.CommandType=CommandType.StoredProcedure nwindConn.Open() SqlCommandBuilder.DeriveParameters(salesCMD) nwindConn.Close() [C#] SqlConnectionnwindConn=newSqlConnection("DataSource=localhost;InitialCatalog=Northwind;IntegratedSecurity=SSPI;"); SqlCommandsalesCMD=newSqlCommand("SalesByYear",nwindConn); salesCMD.CommandType=CommandType.StoredProcedure; nwindConn.Open(); SqlCommandBuilder.DeriveParameters(salesCMD); nwindConn.Close(); |
相关文章推荐
- 使用Command执行存储过程
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用链接服务器执行远程数据库上的存储过程
- VB下使用adodb.command 执行存储过程注意
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
- 使用存储过程新增数据,并执行存储过程
- 在 Access 里使用查询建立 存储过程/视图, 并使用 ASP 执行
- 使用JAVA执行SAS带有参数的存储过程
- ADO.NET笔记——使用Command执行增删改操作,通过判断ExecuteNonQuery()返回值检查是否操作成功
- 创建存储过程使用字符串并接sql再执行语句
- (学习笔记)使用sqlcommand执行存储过程!
- 使用 Firebird 的isql 工具执行Sql脚本来创建存储过程
- 使用存储过程执行数据库备份
- 在Oralce存储过程中使用游标来逐行处理数据示例并执行调试
- SSIS的OLEDB COMMAND中使用存储过程输出参数
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法
- 使用JDBC连接数据库并且调用存储过程和执行SQL语句
- 在 Access 里使用查询建立 存储过程/视图, 并使用 ASP 执行
- ADO.NET_第七篇_OracleCommand_05执行存储过程