You are on page 1of 11

---------

Thế nào là "di chuyển bản ghi", có lẽ cũng chẳng ai biết.


Thông thường muốn lấy thông tin về một bản ghi nào, mình thường dùng đối tượng DataRow. Ví
dụ : Lấy bản ghi thứ 10
DataRow dtr = dataSet.Tables[0].Rows[i];
sau đó muốn lấy thông tin cụ thể của từng trường dữ liệu thì dùng:
dtr["tên trường"]. Ví dụ Nếu muốn lấy tên nhân viên thì dùng:
string employeeName = dtr["EmployeeName"].ToString().
-------------
Trong cấu trúc DataSet thì không có record, mà chỉ chứa trong các bảng của DataSet thôi. Do
vậy bạn muốn di chuyển qua lại giữa các Record trong bảng thì có rất nhiều cách, tuy nhiên
Microsoft đã khuyên nên dùng đối được DataReader.

Bạn có thể tham khảo cách sau:

System.Data.DataTable _dt1 = new System.Data.DataTable();


System.Data.DataTableReader _reader = _dt1.CreateDataReader();

while (_reader.Read())
{

//Đọc dữ liệu ở đây


Console.Write("{0} ", _reader["Tên field"]);
}
---------
Khi bạn fill vào dataSet bạn khai báo biến numRows để nhận tổng số bản ghi:
int numRows = dataAdapter.Fill(dataSet);
sau đó bạn muốn đến bản ghi nào thì dùng DataRow để duyệt:
DataRow dtr = dataSet.Tables[0].Rows[i];
Giả dụ muốn đến bản ghi cuối: DataRow dtr = dataSet.Tables[0].Rows[numRows - 1];

Nếu bạn muốn xây dựng chương trình kiểu như duyệt các bản ghi
sau đó ấn next, preview ... thì trong VS cũng có hỗ trợ bạn làm đấy. Cái DataFormWizard sẽ làm
tất cho bạn. Bạn hãy mua cuốn:
Lập trình CSDL bằng C# (tập 4) của ông Dương Quang Thiện mà đọc. Trong đó có chỉ rõ lắm.

Kết nối cơ sở dữ liệu với SQL2000 trong visual basic.net


Public sqlConn As SqlClient.SqlConnection
Public Sub OpenTheDataBase()
Try
Dim strConn As String
strConn = "Server=yourSV; UID=uid; PWD=pass;Database=yourDataBase"
sqlConn = New SqlClient.SqlConnection(strConn)
sqlConn.Open()
Catch
MsgBox("Không kết nối được với Cơ sở dữ liệu!")
Exit Sub
End Try
End Sub

Xây dựng class để truy cập CSDL


+ Viết hàm kiểm tra kết nối.
+ Các hàm khác ( Điền dữ liệu vào đối tượng bảng làm source cho ComboBox, DataGridView,
ListView ..., Hàm xác nhận Login, Hàm nhận tham số dùng để Insert or Update, ....) đều thực thi
dựa vào vào Hàm kiểm tra kết nối trên.
+ Chỉ cần tạo thể hiện của lớp kiết nối này rồi gọi các phương thức của nó thông qua các tham
số tùy biến. Theo cách này bạn cũng dễ dàng cài đặt chồng phương thức.
+ Nếu trong Project của bạn cần phương thức dùng chung có chức năng tương tự nhau thì gom
chúng lại thành 1 class. VD: lớp kết nối và thao tác DL, Lớp kiểm tra DL, ...
Imports System.Data
Imports System.Data.SqlClient

Public Class DbHelper

#Region "Singleton"

Private Shared helper As DbHelper = Nothing

Public Shared ReadOnly Property Instance() As DbHelper


Get
If helper Is Nothing Then
helper = New DbHelper()
End If
Return helper
End Get
End Property

Public Shared Sub RemoveInstance()


helper = Nothing
End Sub

#End Region

#Region "Contructor"

Public Sub New()


Me.Command.Connection = (New SqlConnection())
End Sub
Public Sub New(ByVal connectString As String, Optional ByVal throwError As Boolean = True)
Me.Command.Connection = (New SqlConnection(connectString))
Me._throwError = throwError
End Sub

Public Sub Dispose()


Me.Command.Dispose()
End Sub

#End Region

#Region "Variable"

Private Command As New SqlCommand()

#End Region

#Region "Properties"

Private _throwError As Boolean = True


Public Property ThrowError() As Boolean
Get
Return _throwError
End Get
Set(ByVal value As Boolean)
_throwError = value
End Set
End Property

Private _messageError As String = String.Empty


Public ReadOnly Property MessageError() As String
Get
Return _messageError
End Get
End Property

Public WriteOnly Property ConnectString() As String


Set(ByVal value As String)
Me.Command.Connection.ConnectionString = value
End Set
End Property

#End Region

#Region "Method : Private"

Private Sub OpenConnect()


Me.Command.Connection.Open()
End Sub

Private Sub CloseConnect()


Me.Command.Connection.Close()
End Sub

#End Region
#Region "Method : Public"

Public Function ExecuteNonQuery(ByVal commandText As String, Optional ByVal commandType


As CommandType = CommandType.Text) As Int32
Dim iResult As Int32 = 0
Try
Me.OpenConnect()
Me.Command.CommandType = commandType
Me.Command.CommandText = commandText
iResult = Me.Command.ExecuteNonQuery()
Me.CloseConnect()
Catch ex As Exception
Me.CloseConnect()
If Not Me.ThrowError Then
Me._messageError = ex.Message
Else
Throw
End If
End Try
Return iResult
End Function

Public Function ExecuteScalar(ByVal commandText As String, Optional ByVal commandType As


CommandType = CommandType.Text) As Int32
Dim iResult As Object = Nothing
Try
Me.OpenConnect()
Me.Command.CommandType = commandType
Me.Command.CommandText = commandText
iResult = Me.Command.ExecuteScalar()
Me.CloseConnect()
Catch ex As Exception
Me.CloseConnect()
If Not Me.ThrowError Then
Me._messageError = ex.Message
Else
Throw
End If
End Try
Return iResult
End Function

Public Function ExecuteReader(ByVal commandText As String, Optional ByVal commandType As


CommandType = CommandType.Text) As SqlDataReader
Dim reader As SqlDataReader = Nothing
Try
Me.OpenConnect()
Me.Command.CommandText = commandText
Me.Command.CommandType = commandType
reader = Me.Command.ExecuteReader(CommandBehavior.CloseConnection)
Catch ex As Exception
Me.CloseConnect()
If Not Me.ThrowError Then
Me._messageError = ex.Message
Else
Throw
End If
End Try
Return reader
End Function

Public Function ExecuteDataSet(ByVal commandText As String, Optional ByVal commandType


As CommandType = CommandType.Text) As DataSet
Dim dsResult As New DataSet
Try
Me.OpenConnect()
Me.Command.CommandText = commandText
Me.Command.CommandType = commandType
Dim adapter As New SqlDataAdapter(Me.Command)
adapter.Fill(dsResult)
Me.CloseConnect()
Catch ex As Exception
Me.CloseConnect()
If Not Me.ThrowError Then
Me._messageError = ex.Message
Else
Throw
End If
End Try
Return dsResult
End Function

Public Function ExecuteDataSet(ByVal commandText As String, ByVal startRecord As Int32,


ByVal maxRecord As Int32, Optional ByVal commandType As CommandType =
CommandType.Text) As DataSet
Dim dsResult As New DataSet
Try
Me.OpenConnect()
Me.Command.CommandText = commandText
Me.Command.CommandType = commandType
Dim adapter As New SqlDataAdapter(Me.Command)
adapter.Fill(dsResult, startRecord, maxRecord, "dsResult")
Me.CloseConnect()
Catch ex As Exception
Me.CloseConnect()
If Not Me.ThrowError Then
Me._messageError = ex.Message
Else
Throw
End If
End Try
Return dsResult
End Function

#End Region

#Region "Method : Public for Parameter"

Public Sub AddParameter(ByVal name As String, ByVal value As Object)


Dim param As SqlParameter = New SqlParameter(name, value)
Me.Command.Parameters.Add(param)
End Sub

Public Sub AddParameter(ByVal name As String, ByVal type As SqlDbType, ByVal value As
Object)
Me.Command.Parameters.Add(name, type).Value = value
End Sub

Public Sub AddParameterOut(ByVal name As String)


Dim param As SqlParameter = New SqlParameter(name, 0)
param.Direction = ParameterDirection.Output
Me.Command.Parameters.Add(param)
End Sub

Public Sub AddParameterOut(ByVal name As String, ByVal type As SqlDbType)


Dim param As SqlParameter = New SqlParameter(name, type)
param.Value = 0
param.Direction = ParameterDirection.Output
Me.Command.Parameters.Add(param)
End Sub

Public Sub ClearParameter()


Me.Command.Parameters.Clear()
End Sub

#End Region

End Class
Đây là vài lớp đơn giản, và được viết rất nghiệp dư: clsConnection , clsTestDataInput

class clsConnection
{
static string STRCON ="workstation id=" + SystemInformation.ComputerName + ";packet
size=4096;integrated security=SSPI;data source=" +
"\"(local)\";persist security info=False;initial catalog=HotelV1G2";
SqlConnection conn;
SqlCommand comm;
SqlDataReader dr;
SqlDataAdapter data;
public bool Connection()
{
bool bol = true;
try
{
using (conn)
{
conn = new SqlConnection(STRCON);
conn.Open();
}
}
catch (Exception)
{
MessageBox.Show("Error connection! Check connection to sql server!!!");
Application.Exit();
}
return bol ;
}
public DataTable GetDataTable(string sql)
{
DataTable table = new DataTable();
try
{
using (data)
{
if (Connection())
{
data = new SqlDataAdapter(sql, conn);
data.Fill(table);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return table;
}
public string ExecuteSQL(string sql)
{
string error = "";
if (Connection())
{
try
{
using (comm)
{
comm = new SqlCommand();
comm.CommandText = sql;
comm.Connection = conn;
comm.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
error = ex.Message;
MessageBox.Show(error);
}
}

return error;
}

public string CustomersExecuteSQL(string sql, ref string[] arrParas)


{
string error = "";
if (Connection())
{
try
{
using (comm)
{
comm = new SqlCommand(sql, conn);
comm.Parameters.Add("@CustomerName", arrParas[0]);
comm.Parameters.Add("@Birthday", arrParas[1]);
comm.Parameters.Add("@Gender", arrParas[2]);
comm.Parameters.Add("@Identity", arrParas[3]);
comm.Parameters.Add("@Address", arrParas[4]);
comm.Parameters.Add("@Telephone", arrParas[5]);
comm.Parameters.Add("@Email", arrParas[6]);
comm.Parameters.Add("@Nationality", arrParas[7]);
comm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
error = ex.Message;
MessageBox.Show(error);
}
}
return error;
}

..................................
==============================================================
internal static class clsTestDataInput
{
internal static Boolean CheckIsNumber(string textInput)
{
Boolean bol = false;
foreach (char letter in textInput)
{
if (char.IsDigit(letter))
{
bol = true;
}
else
{
return bol = false;
}
}
return bol;
}
}
.............................

================================================================

Sử dụng các class trên:

+ Đối với class clsConnection khi sử dụng cần tạo thể hiện

+ class clsTestDataInput thì sử dụng trực tiếp. VD:


clsTestDataInput.CheckIsNumber(txt_ID.Text)

o day tui dung CSDL Oracle

Imports System.Data.OleDB
Module Mod_Connection
Public m_user As String
Public m_pass As String
Public m_schema As String
Public DB_Connection As New OleDb.OleDbConnection
Public WithEvents Trackuser As New ClsThreadingTracking
Public TimeOut As Boolean

Dim t As Threading.Thread

Public Sub Connect_data()


Dim strconn As String
strconn = "Provider=MSDAORA.1;Password=" & m_pass & ";User ID=" & m_user & ";Data
Source=" & m_schema & ";Persist Security Info=false"
DB_Connection.ConnectionString = strconn
DB_Connection.Open()
End Sub

Public Function Init() As Boolean


m_schema = CStr(Readval(HKEY_CURRENT_USER, "software\SSM", "Server"))
m_user = CStr(Readval(HKEY_CURRENT_USER, "software\SSM", "Datauser"))
If IsNumeric(Readval(HKEY_CURRENT_USER, "software\SSM", "Pass")) Then
m_pass = Decrypt(Readval(HKEY_CURRENT_USER, "software\SSM", "Pass"))
Else
Exit Function
End If
Return ((m_user <> "") And (m_schema <> ""))
End Function
end module
class thuc thí sql
Public Class clsData
Private cmd As OleDb.OleDbCommand

Public Function RunSelectSQL(ByVal strSQL As String) As DataSet


Try
Dim da As OleDb.OleDbDataAdapter
Dim cmdSELECT As OleDb.OleDbCommand
Dim ds As DataSet
da = New OleDb.OleDbDataAdapter(strSQL, DB_Connection)
cmdSELECT = New OleDb.OleDbCommand(strSQL, DB_Connection)
da.SelectCommand = cmdSELECT
ds = New DataSet
da.Fill(ds)
Return ds
Catch GetError As System.Exception
MessageBox.Show(GetError.Message)
Return Nothing
End Try
End Function

Public Function RunInsertSQL(ByVal sSQLInsert As String, ByVal tblname As String) As DataSet


Try
Dim da As OleDb.OleDbDataAdapter
Dim cmdSELECT As OleDb.OleDbCommand
Dim ds As DataSet
da = New OleDb.OleDbDataAdapter(sSQLInsert, DB_Connection)
cmdSELECT = New OleDb.OleDbCommand(sSQLInsert, DB_Connection)
da.SelectCommand = cmdSELECT
ds = New DataSet
da.Fill(ds, tblname)
Return ds
Catch GetError As System.Exception
MessageBox.Show(GetError.Message)
Return Nothing
End Try

End Function

Public Function RunDeleteSQL(ByVal sSQLDelete As String, ByVal tblname As String) As


DataSet
Try
Dim da As OleDb.OleDbDataAdapter
Dim cmdDELETE As OleDb.OleDbCommand
Dim ds As DataSet
da = New OleDb.OleDbDataAdapter(sSQLDelete, DB_Connection)
cmdDELETE = New OleDb.OleDbCommand(sSQLDelete, DB_Connection)
da.DeleteCommand = cmdDELETE
ds = New DataSet
da.Fill(ds, tblname)
Return ds
Catch GetError As System.Exception
MessageBox.Show(GetError.Message)
Return Nothing
End Try

End Function

Public Function RunUpdateSQL(ByVal sSQLUpdate As String, ByVal tblname As String) As


DataSet
Try
Dim da As OleDb.OleDbDataAdapter
Dim cmdUPDATE As OleDb.OleDbCommand
Dim ds As DataSet
da = New OleDb.OleDbDataAdapter(sSQLUpdate, DB_Connection)
cmdUPDATE = New OleDb.OleDbCommand(sSQLUpdate, DB_Connection)
da.UpdateCommand = cmdUPDATE
ds = New DataSet
da.Fill(ds, tblname)
Return ds
Catch GetError As System.Exception
MessageBox.Show(GetError.Message)
Return Nothing
End Try
End Function
End Class
string connection = "server=(local);Initial Catalog=;Integrated Security=SSPI";
Trong đó:
- server = tên instance của SQL server mà bạn kết nối, thường nếu là máy của bạn thì để là
(local) hoặc localhost.
- Initial Catalog = tên database.
- Integrated Security=SSPI chính là dùng để dùng theo kiểu windows authentication

You might also like