使用SqlCommandBuilder

使用命令构造器添加行

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace PersistAddsBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = @"server=.;
            integrated security=true;
            database =northwind";

            string qry = @"select * from employees 
            where country='UK'";

            SqlConnection conn = new SqlConnection(connString);

            try
            {
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand(qry, conn);

                SqlCommandBuilder cb = new SqlCommandBuilder(da);

                DataSet ds = new DataSet();
                da.Fill(ds, "employees");

                DataTable dt = ds.Tables["employees"];

                DataRow newRow = dt.NewRow();
                newRow["firstname"] = "Roy";
                newRow["lastname"] = "Beatty";
                newRow["titleofcourtesy"] = "Sir";
                newRow["city"] = "Birmingham";
                newRow["country"] = "UK";
                dt.Rows.Add(newRow);

                foreach (DataRow row in dt.Rows)
                {
                    Console.WriteLine("{0} {1} {2}", row["firstname"].ToString().PadRight(15), row["lastname"].ToString().PadLeft(25), row["city"]);
                }
                da.Update(ds, "employees");
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e);
            }
            finally
            {
                conn.Close();
            }
            Console.ReadKey();
        }
    }
}

使用SqlCommandBuilder_第1张图片

示例说明

最值得注意的地方并不是添加的一行代码,而是该代码所替代的代码,下面的一行语句:

使下面的所有代码变得多余:

string ins = @"insert into employees(firstname,lastname,titleofcourtesy,city,country)
            values(@firstname,@lastname,@titleofcourtesy,@city,@country)";

      

SqlCommand cmd = new SqlCommand(ins, conn);

                cmd.Parameters.Add("@firstname", SqlDbType.NVarChar, 10, "firstname");
                cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 20, "lastname");
                cmd.Parameters.Add("@titleofcourtesy", SqlDbType.NVarChar, 25, "titleofcourtesy");
                cmd.Parameters.Add("@city", SqlDbType.NVarChar, 15, "city");
                cmd.Parameters.Add("@country", SqlDbType.NVarChar, 15, "country");
                da.InsertCommand = cmd;

显然,使用命令构建器比手动编写SQL更好,但是它们只能处理一个表,底层的数据库表必须有主键或唯一键。另外,数据适配器的SelectCommand属性必须有一个包含主键的查询。

你可能感兴趣的:(使用SqlCommandBuilder)