WEB开发网
开发学院数据库MSSQL Server 使用自定义表类型(SQL Server 2008) 阅读

使用自定义表类型(SQL Server 2008)

 2009-09-19 00:00:00 来源:WEB开发网   
核心提示: 看起来不错对吧,但是你应该马上想到一个问题,使用自定义表类型(SQL Server 2008)(2),如果说这个存储过程要在客户端代码中调用,那么该怎么提供这个参数值呢? usingSystem.Data.SqlClient;usingSystem.Data;classProgram{stati

看起来不错对吧,但是你应该马上想到一个问题,如果说这个存储过程要在客户端代码中调用,那么该怎么提供这个参数值呢?

using System.Data.SqlClient;
using System.Data; 
class Program
{
    static void Main(string[] args)
    {
        DataTable tb = GetData();
        using (SqlConnection conn = new SqlConnection("server=sql2008;database=demo;integrated security=true"))
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "GetCustomers";
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter param = new SqlParameter("@c", SqlDbType.Structured);//这个类型很关键
                param.Value = tb;
                cmd.Parameters.Add(param);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        } 
        Console.WriteLine("完成操作");
        Console.Read();
    } 
    private static DataTable GetData()
    {
        DataTable tb = new DataTable();
        tb.Columns.Add("Id",typeof(int));
        tb.Columns.Add("Name", typeof(string)); 
        //添加100个客户资料
        for (int i = 0; i < 100; i++)
        {
            DataRow row = tb.NewRow();
            row[0] = i;
            row[1] = "Name " + i.ToString();
            tb.Rows.Add(row);
        } 
        return tb;
    }
}

读者可能会疑惑,这样做实在是太棒了,可以一次性写入100行数据呢?我们再来看看在服务端到底发生了什么事情

使用自定义表类型(SQL Server 2008)

图片看不清楚?请点击这里查看原图(大图)。

实际上,在服务端确实会有一个定义临时变量的过程,然后把所有的数据插入到这个变量中去,然后再执行存储过程的

最后,我们可以再深入探讨探讨

1. 客户端是否一定用DataTable类型

-- 推荐使用DataTable类型,但也可以使用其他的类型,例如DataReader的数据流

2. DataTable的字段名称是否要匹配

--不一定。只要顺序一致,类型一样就可以了。

上一页  1 2 

Tags:使用 定义 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接