C#下的数据库操作

function StorePage() { d=document; t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():''); void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); }

一:数据库部分
数据库连接:
1:OLE方式连接(主要是对Access数据库系统)
using System.Data.OleDb;
OleDbConnection thisConnection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" +
@"C:\Program Files\Microsoft.NET\FrameworkSDK" +
@"\Samples\QuickStart\aspplus\samples\portal\data\portal.mdb");
2:对Oracle数据库的连接
using System.Data.OracleClient;
OracleConnection thisConnection = new OracleConnection(
"SERVER=nineaye;" +
"UID=scott;" +
"PASSWORD=tiger;"
3:对SqlServer数据库的连接
using System.Data.SqlClient;
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString =
@"Server=(local)\NetSDK;" +
"Integrated Security=SSPI;" +
"Connection Timeout=5;" ;

命令行的使用
1:无参数的命令的执行,插入语句
SqlConnection thisConnection = new SqlConnection
(@"Server=(local)\NetSDK;"
"Integrated Security=SSPI;" +
"Connection Timeout=5;" +
"Database=tempdb;" );
SqlCommand nonqueryCommand = thisConnection.CreateCommand();
thisConnection.Open();
nonqueryCommand.CommandText = "CREATE TABLE MyTmpTable (COL1 integer)";
nonqueryCommand.ExecuteNonQuery() ;
nonqueryCommand.CommandText = "INSERT INTO MyTmpTable VALUES (37)";
nonqueryCommand.ExecuteNonQuery();
又一例
SqlCommand nonqueryCommand = thisConnection.CreateCommand();
nonqueryCommand.CommandText =
"INSERT INTO Employees (Firstname, Lastname) " +
"VALUES ('Zachariah', 'Zinn')";
nonqueryCommand.ExecuteNonQuery();

2:返回单个值的SQL语句
SqlCommand selectCommand =
new SqlCommand("SELECT COUNT(*) FROM Employees", thisConnection);
selectCommand.ExecuteScalar();

3:有参数的命令的执行
SqlConnection thisConnection = new SqlConnection
(@"Server=(local)\NetSDK;" +
"Integrated Security=SSPI;" +
"Connection Timeout=5;" +
"Database=tempdb;" );

SqlCommand nonqueryCommand = thisConnection.CreateCommand();
nonqueryCommand.CommandText =
"INSERT INTO MyTable VALUES (@MyName, @MyNumber)" ;
nonqueryCommand.Parameters.Add("@MyName", SqlDbType.VarChar, 30);
nonqueryCommand.Parameters.Add("@MyNumber", SqlDbType.Int);
nonqueryCommand.Prepare();
nonqueryCommand.Parameters["@MyName"].Value ="张三";
nonqueryCommand.Parameters["@MyNumber"].Value = 95001;

DataReader使用
1:返回结果集的使用
string ConStr = @"server=(local)\NetSDK;" +
"Integrated Security=SSPI;database=Northwind";
SqlConnection sqlConn = new SqlConnection(ConStr);
sqlConn.Open();
string SQL = "SELECT ContactName FROM Customers";
SqlCommand sqlComm= new SqlCommand(SQL,sqlConn);
SqlDataReader sqlReader = sqlComm.ExecuteReader();
while(sqlReader.Read())
{
Console.WriteLine("{0}", sqlReader[0]);
}
sqlReader.Close();
2:返回表的结构如表的列名
string ConStr = @"server=(local)\NetSDK;" +
"Integrated Security=true;" +
"database=Northwind";
SqlConnection sqlConn = new SqlConnection(ConStr);
try
{
sqlConn.Open();

string Sql = "SELECT * FROM Employees";
SqlCommand sqlCom = new SqlCommand(Sql,sqlConn);
SqlDataReader sqlReader = sqlCom.ExecuteReader();

DataTable schemaTable = sqlReader.GetSchemaTable();

/* Display data structure info of each row in the
* returned DataTable, which describes
* one column in the original table */
foreach (DataRow dRow in schemaTable.Rows)
{
foreach (DataColumn dCol in schemaTable.Columns)
Console.WriteLine(dCol.ColumnName + " = " + dRow[dCol]);

}

sqlReader.Close();
}


DataSet使用
1:利用DataSet修改数据库内容
string conStr = @"server=(local)\NetSDK;" +
"Integrated Security=true;" +
"database=Northwind";
SqlConnection Conn = new SqlConnection(conStr);
try
{
string SQL = "SELECT * FROM Employees " +
"WHERE Country = 'UK'";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(SQL,Conn);
//填充DataSet
DataSet ds = new DataSet();
da.Fill(ds, "Employees");
//取得DataSet中的表Employees
DataTable dt = ds.Tables["Employees"];
//使表的列FirstName不能为空
dt.Columns["FirstName"].AllowDBNull = false;
//修改表的第一行的FirstName
dt.Rows[0]["FirstName"] = "Wrox Press";

//增加新的一行
DataRow newRow = dt.NewRow();
newRow["FirstName"]="Julian";
newRow["LastName"] = "Skinner";
newRow["TitleOfCourtesy"] = "Mr.";
newRow["City"] = "Birmingham";
dt.Rows.Add(newRow);

// 显示DataSet结果
foreach(DataRow r in dt.Rows)
{
Console.WriteLine("{0} {1} {2}",
r["FirstName"].ToString().PadRight(15),
r["LastName"].ToString().PadLeft(25),
r["City"]);
}

// 使对客户段的修改返回到数据库中
SqlCommandBuilder sqlCb = new SqlCommandBuilder(da);
da.Update(ds,"Employees");
}
catch(Exception ex)
{
Console.WriteLine("Error Orccured: " + ex.Message);
Conn.Close();
}
finally
{

Conn.Close();
Console.ReadLine();
}
}
2:填充并显示DataSet
string conStr = @"server=(local)\NetSDK;" +
"Integrated Security=true;" +
"database=Northwind";

SqlConnection sqlConn = new SqlConnection(conStr);

try
{
sqlConn.Open();

string SQL = "SELECT ProductName, UnitPrice " +
"FROM Products WHERE UnitPrice < 20";

SqlDataAdapter da = new SqlDataAdapter(SQL, sqlConn);

// Create a DataSet
DataSet ds = new DataSet();

// Populate the DataSet with the Products table
da.Fill(ds, "Products");

// Get reference to the DataTable object for the Products table
DataTable dt = ds.Tables["Products"];

// Display data stored in the DataTable
foreach (DataRow dRow in dt.Rows)
{
foreach (DataColumn dCol in dt.Columns)
Console.WriteLine(dRow[dCol]);
Console.WriteLine("=================");
}
}
catch(Exception ex)
{
// Catch an exception thrown, if any, and display
Console.WriteLine("Error: " + ex.Message);
sqlConn.Close();
}
finally
{
// Close active connection object
sqlConn.Close();
Console.ReadLine();
}
}
3: 使用 DataSet的WriteXML方法将数据库表内容用XML文件显示
using System;
using System.Data;
using System.Data.SqlClient;

class WriteXML
{
static void Main()
{
string conStr = @"server=(local)\NetSDK;" +
"Integrated Security=true;" +
"database=Northwind";

SqlConnection sqlConn = new SqlConnection(conStr);
sqlConn.Open();

string SQL = "SELECT ProductName, UnitPrice FROM Products";
SqlDataAdapter da = new SqlDataAdapter(SQL, sqlConn);
DataSet ds = new DataSet("MyDataSet");
da.Fill(ds, "Products");

ds.WriteXml(@"c:\BegCSharpDB\Chapter8_Examples\ProductsTable.xml");
sqlConn.Close();
}
}
4:将 DataSet 与控件DataGrid绑定起来
string ConStr = @"server=(local)\NetSDK;" +
"Integrated Security=SSPI;" +
"database=Northwind";

// SQL Query
string SQL = "SELECT * FROM Customers";
SqlConnection Conn = new SqlConnection(ConStr);
SqlDataAdapter da = new SqlDataAdapter(SQL, Conn);
DataSet ds = new DataSet();

// Fill DataSet with data
da.Fill(ds, "Customers");

// Bind the whole table to the DataGrid control
dataGrid1.SetDataBinding(ds, "Customers");
5:将 DataSet 与控件DataGrid绑定并将DataGrid做的修改返回到数据库
private System.Windows.Forms.DataGrid dataGrid1;
private System.Data.DataSet dataSet1;
private System.Data.SqlClient.SqlCommand sqlCommand1;

private SqlCommandBuilder sqlCb;
private SqlDataAdapter da;
private System.Windows.Forms.Button buttonUpdate;
private void Form1_Load(object sender, System.EventArgs e)
{
string ConStr = @"server=(local)\NetSDK;" +
"Integrated Security=SSPI;" +
"database=Northwind";

// Get Data from multiple tables table
string SQL = "SELECT * FROM Employees";

SqlConnection Conn = new SqlConnection(ConStr);

// Create a SqlCommand object
sqlCommand1 = new SqlCommand(SQL, Conn);

// Create a SqlDataAdapter object
da = new SqlDataAdapter();
da.SelectCommand = sqlCommand1;

// Create a SqlCommandBuilder object
sqlCb = new SqlCommandBuilder(da);

// Fill DataSet with data from Employees table
da.Fill(dataSet1, "Employees");

// Bind the DataGrid at run time
dataGrid1.SetDataBinding(dataSet1, "Employees");

}
private void buttonUpdate_Click(object sender, System.EventArgs e)
{
/* Call the Update method which uses
* the SqlCommandBuilder to update the data source
* with modified data */
da.Update(dataSet1, "Employees");

}
6:将 DataSet 中父子表与控件DataGrid绑定
string ConStr = @"server=(local)\NetSDK;" +
"Integrated Security=SSPI;" +
"database=Northwind";

// Get Data from multiple tables table
string SQL = "SELECT * FROM Employees;" +
"SELECT * FROM Orders";

SqlConnection Conn = new SqlConnection(ConStr);
SqlDataAdapter da = new SqlDataAdapter(SQL, Conn);

// Map default table names to Employees and Orders
da.TableMappings.Add("Table", "Employees");
da.TableMappings.Add("Table1", "Orders");

// Fill DataSet with data from both tables
da.Fill(dataSet1);

/* Create a relation between the two distinct tables
* and add it into the DataSet */
DataRelation myRel = new DataRelation("EmployeeOrders",
dataSet1.Tables[0].Columns["EmployeeID"],
dataSet1.Tables[1].Columns["EmployeeID"]);
dataSet1.Relations.Add(myRel);

// Bind the DataGrid at run time
dataGrid1.SetDataBinding(dataSet1, "Employees");


存储过程的使用
1:无输入参数存储过程的使用

SqlConnection cn = new SqlConnection(@"Data Source=(local)\NETSDK;" +
"Integrated Security=SSPI;database=Northwind");

SqlCommand cmd= cn.CreateCommand();

cmd.CommandType= CommandType.StoredProcedure;
cmd.CommandText="sp_Select_AllEmployees";

cn.Open();
SqlDataReader dr=cmd.ExecuteReader();

for (int i=0; i< dr.FieldCount; i++)
{
dr.GetName(i);
lvwRS.Columns.Add(c);
}

while (dr.Read())
{
for (int i=1 ; i< dr.FieldCount; i++)
{
dr.GetValue(i).ToString();
}
}

dr.Close();
cn.Close();

2:有输入参数的存储过程的使用

SqlConnection cn = new SqlConnection(@"Data Source=(local)\NETSDK;" +
"Integrated Security=SSPI;database=Northwind");

SqlCommand cmd= cn.CreateCommand();

cmd.CommandType= CommandType.StoredProcedure;
cmd.CommandText="sp_Orders_ByEmployeeId";

SqlParameter parInput = cmd.Parameters.Add("@EmployeeId", SqlDbType.Int);
parInput.Direction = ParameterDirection.Input;
parInput.Value= Convert.ToInt32(txtEmpId1.Text);
cn.Open();

SqlDataReader dr=cmd.ExecuteReader();


for (int i=0; i< dr.FieldCount; i++)
{
dr.GetName(i);
}

while (dr.Read())
{
for (int i=1 ; i< dr.FieldCount; i++)
{
dr.GetValue(i).ToString();
}
}

dr.Close();
cn.Close();
}

3:有返回参数的存储过程的使用

SqlConnection cn = new SqlConnection(@"Data Source=(local)\NETSDK;" +
"Integrated Security=SSPI;database=Northwind");

SqlCommand cmd= cn.CreateCommand();
cmd.CommandType= CommandType.StoredProcedure;
cmd.CommandText="sp_Orders_MoreThan100";
SqlParameter parReturn = cmd.Parameters.Add("ReturnValue", SqlDbType.Int);
parReturn.Direction = ParameterDirection.ReturnValue ;

cn.Open();

//execute the command and display the results
cmd.ExecuteScalar();
txtReturn.Text= Convert.ToString(cmd.Parameters["ReturnValue"].Value);

cn.Close();

4:有输出参数存储过程的使用

SqlConnection cn = new SqlConnection(@"Data Source=(local)\NETSDK;" +
"Integrated Security=SSPI;database=Northwind");

SqlCommand cmd= cn.CreateCommand();

cmd.CommandType= CommandType.StoredProcedure;
cmd.CommandText="sp_Dates_ByEmployeeId";

SqlParameter parInput = cmd.Parameters.Add("@EmployeeId", SqlDbType.Int);
parInput.Direction = ParameterDirection.Input;
parInput.Value= Convert.ToInt32(txtEmpId2.Text);


SqlParameter parOutput1 = cmd.Parameters.Add("@EDate",SqlDbType.DateTime);
parOutput1.Direction = ParameterDirection.Output ;
SqlParameter parOutput2 = cmd.Parameters.Add("@LDate",SqlDbType.DateTime);
parOutput2.Direction = ParameterDirection.Output ;

cn.Open();
cmd.ExecuteNonQuery() ;
txtEDate.Text= Convert.ToString(parOutput1.Value);
txtLDate.Text =Convert.ToString(parOutput2.Value);
cn.Close();


你可能感兴趣的:(数据结构,C++,c,SQL Server,C#)