C#数据库操作的三种用法

以下是我在visual studio 2005上写的一个类(连的是SQL Server 2005),已经过测试通过。里面有3个方法比较典型,源码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace DatabaseOperate
{
 class SqlOperateInfo
 {
  //Suppose your ServerName is "aa",DatabaseName is "bb",UserName is "cc", Password is "dd"
  private string sqlConnectionCommand = "Data Source=aa;Initial Catalog=bb;User ID=cc;Pwd=dd";
  //This table contains two columns:KeywordID int not null,KeywordName varchar(100) not null
  private string dataTableName = "Basic_Keyword_Test";

  private string storedProcedureName = "Sp_InertToBasic_Keyword_Test";
  private string sqlSelectCommand = "Select KeywordID, KeywordName From Basic_Keyword_Test";
  //sqlUpdateCommand could contain "insert" , "delete" , "update" operate
  private string sqlUpdateCommand = "Delete From Basic_Keyword_Test Where KeywordID = 1";
        //方法一
  public void UseSqlReader()
  {
   SqlConnection sqlConnection = new SqlConnection(sqlConnectionCommand);
   SqlCommand sqlCommand = new SqlCommand();
   sqlCommand.CommandType = System.Data.CommandType.Text;
   sqlCommand.Connection = sqlConnection;
   sqlCommand.CommandText = sqlSelectCommand;

   sqlConnection.Open();
   SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
   while(sqlDataReader.Read())
   {
    //Get KeywordID and KeywordName , You can do anything you like. Here I just output them.
    int keywordid = (int)sqlDataReader[0];
    //the same as: int keywordid = (int)sqlDataReader["KeywordID"]
    string keywordName = (string)sqlDataReader[1];
    //the same as: string keywordName = (int)sqlDataReader["KeywordName"]
    Console.WriteLine("KeywordID = " + keywordid + " , KeywordName = " + keywordName);
   }

   sqlDataReader.Close();
   sqlCommand.Dispose();
   sqlConnection.Close();
  }

        //方法二
  public void UseSqlStoredProcedure()
  {
   SqlConnection sqlConnection = new SqlConnection(sqlConnectionCommand);
   SqlCommand sqlCommand = new SqlCommand();
   sqlCommand.CommandType = CommandType.StoredProcedure;
   sqlCommand.Connection = sqlConnection;
   sqlCommand.CommandText = storedProcedureName;

   sqlConnection.Open();
   sqlCommand.ExecuteNonQuery();
   //you can use reader here,too.as long as you modify the sp and let it like select * from ....

   sqlCommand.Dispose();
   sqlConnection.Close();
  }
        //方法三
  public void UseSqlDataSet()
  {
   SqlConnection sqlConnection = new SqlConnection(sqlConnectionCommand);
   SqlCommand sqlCommand = new SqlCommand();
   sqlCommand.CommandType = System.Data.CommandType.Text;
   sqlCommand.Connection = sqlConnection;
   sqlCommand.CommandText = sqlSelectCommand;

   sqlConnection.Open();
   SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
   sqlDataAdapter.SelectCommand = sqlCommand;
   DataSet dataSet = new DataSet();
   //sqlCommandBuilder is for update the dataset to database
   SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);
   sqlDataAdapter.Fill(dataSet, dataTableName);

   //Do something to dataset then you can update it to  Database.Here I just add a row
   DataRow row = dataSet.Tables[0].NewRow();
   row[0] = 10000;
   row[1] = "new row";
   dataSet.Tables[0].Rows.Add(row);

   sqlDataAdapter.Update(dataSet, dataTableName);

   sqlCommand.Dispose();
   sqlDataAdapter.Dispose();
   sqlConnection.Close();
  }
 }
}

posted @ 2007-08-09 06:44 oec2003 阅读(1220) 评论(9)  编辑 收藏 所属分类: c#sqlserver

  回复  引用  查看    
#1楼 2007-08-09 08:20 | 朱宁      
不是吧.
  回复  引用    
#2楼 2007-08-09 09:55 | zgz [未注册用户]
这么没有技术含量的啊,只要是做软件C#的,谁都知道的东西
  回复  引用  查看    
#3楼 2007-08-09 10:00 | Gary Gong      
一般都使用第一种
因为SqlDataReader比较轻量级
当然,如果数据多点,开发稍微重量级点,一般都是用存储过程+SqlDataAdapter+DataSet+缓存


  回复  引用  查看    
#4楼 [楼主]2007-08-09 10:15 | oec2003      
每个人都是经历从不懂到懂的这么一个过程的
  回复  引用  查看    
#5楼 2007-08-09 11:04 | Gary Gong      
@oec2003
这个我赞同,我是菜鸟,才接触.net两个月。
不过这三种数据库链接方式都用过了
可惜还是有些懵懂
  回复  引用  查看    
#6楼 2007-08-09 13:23 | 徐少侠      
每个都没有体现出所谓断开式连接的意思
  回复  引用  查看    
#7楼 2007-08-09 14:53 | flyingfish      
@徐少侠
断开连接你给解释解释?
  回复  引用  查看    
#8楼 2007-08-09 18:53 | Gary Gong      
每个人都是经历从不懂到懂的这么一个过程的
  回复  引用    
#9楼 2007-08-10 20:01 | houlei [未注册用户]
这些确实都是最基本的.

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: