麻烦给出简单的例子
包括简单的存储过程和
C#里调用该存储过程并得到存储过程返回的字符串.

解决方案 »

  1.   

    C#调用存储过程的通用类using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.SqlClient;
    using System.Collections;
    using System.Data;
    // 摘要:数据访问助手。
    // 作者:ZhiQiao
    // 日期:2008/07/02namespace ZhiQiao.DataAccessHelper
    {
    // 存储过程调用助手。
        public class StoreProcedure
    {
    // 存储过程名称。
            private string _name;
    // 数据库连接字符串。
            private string _conStr;
    // 构造函数
    // sprocName: 存储过程名称;
    // conStr: 数据库连接字符串。
            public StoreProcedure(string sprocName, string conStr) {
    _conStr = conStr;
    _name = sprocName;
    }
    //  执行存储过程,不返回值。
    //  paraValues: 参数值列表。
    //  return: void
            public void ExecuteNoQuery(params object[] paraValues) {
    using (SqlConnection con = new SqlConnection(_conStr)) {
    SqlCommand comm = new SqlCommand(_name, con);
    comm.CommandType = CommandType.StoredProcedure;
    AddInParaValues(comm, paraValues);
    con.Open();
    comm.ExecuteNonQuery();
    con.Close();
    }
    }
    // 执行存储过程返回一个表。
    // paraValues: 参数值列表。
    // return: DataTable
            public DataTable ExecuteDataTable(params object[] paraValues) {
    SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr));
    comm.CommandType = CommandType.StoredProcedure;
    AddInParaValues(comm, paraValues);
    SqlDataAdapter sda = new SqlDataAdapter(comm);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    return dt;
    }
    // 执行存储过程,返回SqlDataReader对象,
    // 在SqlDataReader对象关闭的同时,数据库连接自动关闭。
    // paraValues: 要传递给给存储过程的参数值类表。
    // return: SqlDataReader
            public SqlDataReader ExecuteDataReader(params object[] paraValues) {
    SqlConnection con = new SqlConnection(_conStr);
    SqlCommand comm = new SqlCommand(_name, con);
    comm.CommandType = CommandType.StoredProcedure;
    AddInParaValues(comm, paraValues);
    con.Open();
    return comm.ExecuteReader(CommandBehavior.CloseConnection);
    }
    // 获取存储过程的参数列表。
            private ArrayList GetParas() {
    SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90",
    new SqlConnection(_conStr));
    comm.CommandType = CommandType.StoredProcedure;
    comm.Parameters.AddWithValue("@procedure_name", (object)_name);
    SqlDataAdapter sda = new SqlDataAdapter(comm);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    ArrayList al = new ArrayList();
    for (int i = 0; i < dt.Rows.Count; i++) {
    al.Add(dt.Rows[i][3].ToString());
    }
    return al;
    }
    // 为 SqlCommand 添加参数及赋值。
            private void AddInParaValues(SqlCommand comm, params object[] paraValues) {
    comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int));
    comm.Parameters["@RETURN_VALUE"].Direction =
    ParameterDirection.ReturnValue;
    if (paraValues != null) {
    ArrayList al = GetParas();
    for (int i = 0; i < paraValues.Length; i++) {
    comm.Parameters.AddWithValue(al[i + 1].ToString(),
    paraValues[i]);
    }
    }
    }
    }
    }