使用Command执行存储过程

|

_ .NET Framework Developer's Guide _

** 使用 ** ** Command ** ** 执行存储过程 **

|

---|---

在数据驱动的应用程序中,存储过程可以提供很多优点。使用存储过程可以将数据库操作封装到一条简单的命令中,可以优化效能,可以增强安全性。只需要按照 SQL 语法在存储过程名后面跟带参数就可以调用该存储过程。使用 ADO.NET 中 ** Command ** 对象的 ** Parameters ** 属性你还可以明确的定义和使用 output 参数和 return 值。

调用存储过程时,要设置 ** Command ** 对象的 ** CommandType ** 属性为 ** StoreProcedure ** 。一旦设定了 ** CommandType ** 属性为 ** StoreProcedure ** ,你就可以使用 ** Parameters ** 集合来定义参数,就像下面的例子。

注意 使用 ** OdbcCommand ** 调用存储过程时要求提供完整的 ODBC CALL 语法。

SqlClient

[Visual Basic]


Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _


                                                   "Initial Catalog=northwind")


 


Dim salesCMD As SqlCommand = New SqlCommand("SalesByCategory", nwindConn)


salesCMD.CommandType = CommandType.StoredProcedure


 


Dim myParm As SqlParameter = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15)


myParm.Value = "Beverages"


 


nwindConn.Open()


 


Dim myReader As SqlDataReader = salesCMD.ExecuteReader()


 


Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1))


 


Do While myReader.Read()


  Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1))


Loop


 


myReader.Close()


nwindConn.Close()


[C#]


SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");


 


SqlCommand salesCMD = new SqlCommand("SalesByCategory", nwindConn);


salesCMD.CommandType = CommandType.StoredProcedure;


 


SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);


myParm.Value = "Beverages";


 


nwindConn.Open();


 


SqlDataReader myReader = 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

[Visual Basic]


Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;" & _


                                                       "Initial Catalog=northwind")


 


Dim salesCMD As OleDbCommand = New OleDbCommand("SalesByCategory", nwindConn)


salesCMD.CommandType = CommandType.StoredProcedure


 


Dim myParm As OleDbParameter = salesCMD.Parameters.Add("@CategoryName", OleDbType.VarChar, 15)


myParm.Value = "Beverages"


 


nwindConn.Open()


 


Dim myReader As OleDbDataReader = salesCMD.ExecuteReader()


 


Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1))


 


Do While myReader.Read()


  Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1))


Loop


 


myReader.Close()


nwindConn.Close()


[C#]


OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;" +


                                                "Initial Catalog=northwind");


 


OleDbCommand salesCMD = new OleDbCommand("SalesByCategory", nwindConn);


salesCMD.CommandType = CommandType.StoredProcedure;


 


OleDbParameter myParm = salesCMD.Parameters.Add("@CategoryName", OleDbType.VarChar, 15);


myParm.Value = "Beverages";


 


nwindConn.Open();


 


OleDbDataReader myReader = 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

[Visual Basic]


Dim nwindConn As OdbcConnection = New OdbcConnection("Driver={SQL Server};Server=localhost;Trusted_Connection=yes;" & _


                                                       "Database=northwind")


nwindConn.Open()


 


Dim salesCMD As OdbcCommand = New OdbcCommand("{ CALL SalesByCategory(?) }", nwindConn)


salesCMD.CommandType = CommandType.StoredProcedure


 


Dim myParm As OdbcParameter = salesCMD.Parameters.Add("@CategoryName", OdbcType.VarChar, 15)


myParm.Value = "Beverages"


 


Dim myReader As OdbcDataReader = salesCMD.ExecuteReader()


 


Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1))


 


Do While myReader.Read()


  Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1))


Loop


 


myReader.Close()


nwindConn.Close()


[C#]


OdbcConnection nwindConn = new OdbcConnection("Driver={SQL Server};Server=localhost;Trusted_Connection=yes;" +


                                              "Database=northwind");


nwindConn.Open();


 


OdbcCommand salesCMD = new OdbcCommand("{ CALL SalesByCategory(?) }", nwindConn);


salesCMD.CommandType = CommandType.StoredProcedure;


 


OdbcParameter myParm = salesCMD.Parameters.Add("@CategoryName", OdbcType.VarChar, 15);


myParm.Value = "Beverages";


 


OdbcDataReader myReader = 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

[Visual Basic]


Dim sampleCMD As SqlCommand = New SqlCommand("SampleProc", nwindConn)


sampleCMD.CommandType = CommandType.StoredProcedure


 


Dim sampParm As SqlParameter = sampleCMD.Parameters.Add("RETURN_VALUE", SqlDbType.Int)


sampParm.Direction = ParameterDirection.ReturnValue


 


sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12)


sampParm.Value = "Sample Value"


 


sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28)


sampParm.Direction = ParameterDirection.Output


 


nwindConn.Open()


 


Dim sampReader As SqlDataReader = sampleCMD.ExecuteReader()


 


Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1))


 


Do While sampReader.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#]


SqlCommand sampleCMD = new SqlCommand("SampleProc", nwindConn);


sampleCMD.CommandType = CommandType.StoredProcedure;


 


SqlParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE", SqlDbType.Int);


sampParm.Direction = ParameterDirection.ReturnValue;


 


sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12);


sampParm.Value = "Sample Value";


 


sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28);


sampParm.Direction = ParameterDirection.Output;


 


nwindConn.Open();


 


SqlDataReader sampReader = 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

[Visual Basic]


Dim sampleCMD As OleDbCommand = New OleDbCommand("SampleProc", nwindConn)


sampleCMD.CommandType = CommandType.StoredProcedure


 


Dim sampParm As OleDbParameter = sampleCMD.Parameters.Add("RETURN_VALUE", OleDbType.Integer)


sampParm.Direction = ParameterDirection.ReturnValue


 


sampParm = sampleCMD.Parameters.Add("@InputParm", OleDbType.VarChar, 12)


sampParm.Value = "Sample Value"


 


sampParm = sampleCMD.Parameters.Add("@OutputParm", OleDbType.VarChar, 28)


sampParm.Direction = ParameterDirection.Output


 


nwindConn.Open()


 


Dim sampReader As OleDbDataReader = sampleCMD.ExecuteReader()


 


Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1))


 


Do While sampReader.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#]


OleDbCommand sampleCMD = new OleDbCommand("SampleProc", nwindConn);


sampleCMD.CommandType = CommandType.StoredProcedure;


 


OleDbParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE", OleDbType.Integer);


sampParm.Direction = ParameterDirection.ReturnValue;


 


sampParm = sampleCMD.Parameters.Add("@InputParm", OleDbType.VarChar, 12);


sampParm.Value = "Sample Value";


 


sampParm = sampleCMD.Parameters.Add("@OutputParm", OleDbType.VarChar, 28);


sampParm.Direction = ParameterDirection.Output;


 


nwindConn.Open();


 


OleDbDataReader sampReader = sampleCMD.ExecuteReader();


 </S
Published At
Categories with Web编程
Tagged with
comments powered by Disqus