程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> c# 數據庫編程(通過SqlCommand 執行DML語句)

c# 數據庫編程(通過SqlCommand 執行DML語句)

編輯:C#基礎知識

原來一直是java,python等語言,最近用c#語言,並編寫數據庫訪問代碼。使用了之後,這裡總結下,分享下c#如何操作數據庫。

在java等其它語言中,有一套標准的api來完成數據庫訪問,並且一般都是通過sql語句來訪問的。而在c#中,提供了多種靈活的方式。

大致可以分為:

1)和其它語言一樣,直接利用sql命令(包括存儲過程)操作數據庫

2)利用sql語句,同時結合DataSet、DataAdapter等Api,提高使用的效率

3)與gui程序結合,與DataGridView等可視化組件結合。

本文介紹第一種方式。對於第一種方式,主要分為更新語句和查詢語句,需要考慮的有:

1)單條和批量更新語句的執行

2)參數綁定

3)事務處理

.........

下面我們按照常用的使用場景一 一來介紹。

 

一、更新操作(單條語句)

直接上代碼

using System;
using System.Data;
using System.Data.SqlClient;

namespace DbExample
{
    class DbActor
    {
        public void updateDb()
        {
            SqlConnection conn = getConnection();
            try
            {
                conn.Open();
                SqlCommand command = new SqlCommand("insert userinfo values('aaa','bb')", conn);
                int re = command.ExecuteNonQuery();
                if (re == 1)
                {
                    System.Console.WriteLine("inset success");
                }
                else
                {
                    System.Console.WriteLine("inset error");
                }
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

        private SqlConnection getConnection()
        {
            string strConnection = @"Data Source = localhost\SQLEXPRESS; Initial Catalog = mydb; User Id = sa; Password = 12345678;";
            SqlConnection conn = new SqlConnection(strConnection);
            return conn;
        }
    }
}

 


需要注意幾點:
1)數據庫鏈接是資源,使用完需要釋放。這在所有其它語言的數據庫訪問中都是這樣的。

2)c#比較討厭的是,它針對不同的數據庫,有不同的數據訪問對象(類名不同,所在的命名空間不同),這裡的api都是Sqlxxxxx,以Sql打頭的api是訪問sql server數據庫的api。這點在使用時需要注意。

3)ExecuteNonQuery 方法的返回值是執行sql命令後影響的記錄的條數。

 

二、參數綁定

執行sql命令,最基本的就是拼湊一個完整的sql語句執行。但更常用的做法是進行參數傳遞的方式,這樣可以有效利用數據庫的特性,提高同類sql語句(sql命令一樣,只是命令的值不同)的執行效率。舉例代碼如下:

 public void updateDbByPara()
        {
            SqlConnection conn = getConnection();
            try
            {
                conn.Open();
                SqlCommand command = new SqlCommand("insert userinfo values(@name,@pass)", conn);
                command.Parameters.Add(new SqlParameter("@name","x1"));
                command.Parameters.Add(new SqlParameter("@pass", "123"));
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

注意:sql語句中的  @參數名  不能用引號括起來,否則就當作字符串值了。

三、事務

當同時執行多條dml語句時,需要考慮在一個事務中執行。下面給出一個例子:

public void updateDbByTrans()
        {
            SqlConnection conn = getConnection();
            SqlTransaction trans = null;
            try
            {
                conn.Open();
                trans = conn.BeginTransaction();
                SqlCommand command = new SqlCommand("insert userinfo values(@name,@pass)", conn,trans);
                command.Parameters.Add(new SqlParameter("@name", "x5"));
                command.Parameters.Add(new SqlParameter("@pass", "123"));
                command.ExecuteNonQuery();

                command.Parameters.Clear();
                command.Parameters.Add(new SqlParameter("@name", "x4"));
                command.Parameters.Add(new SqlParameter("@pass", "123"));
                command.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                try
                {
                    trans.Rollback();
                }
                catch { }
            }
            finally
            {
                conn.Close();
            }
        }

上面執行了兩個sql語句,如果第一個語句成功,但第2個語句失敗,因為在一個事務中,第一個語句也不會生效。

 本文介紹了如何直接利用sql語句進行數據庫的更新操作,下面的文章會接著進行數據庫查詢等操作的介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved