数据库的连接
***************************************************************************
用代码吧,实际中很少用到直接拖连接.
先引用 using System.Data.SqlClient;
如果要链接SQL
string connString = "Data Source=localhost;integrated security=True;Initial Catalog=lpt;";
string SqlString = "Select * From lptTable";
SqlConnection conn=new SqlConnection();
如果要链接Microsoft Acess
用OleDbConnection,根把链接SQL的语句中的SqlConnect conn=new SqlConnect(connString);惯用语为
OleDbConnection conn=new OleDbConnection(connString);
并且server参数改为Provider,OLE DB不能使用Integrated Security参数
(Provider=Microsoft.Jet.OLEDB.4.0)
using System.Data.OleDb;
如果要链接Oracle
用OleDbConnection,根把链接Acess的语句中的OleDbConnection conn=new OleDbConnection(connString);的
语句改为OracleConnect conn=new OracleConnect(connString);
using System.Data.OracleClient;
***************************************************************************
一些关键词:
**************************************************
SqlConnection conn=new SqlConnection conn;
conn.Open , conn.Close()--->打开关闭链接
conn.State-->状态(Open or Close)
conn.DataSource--->链接的数据库的物理位置
conn.ConnectionString--->显示链接的字符串语句
conn.ServerVersion--->链接库的版本??
//Command对象的创建
1.SqlCommand command=new SqlCommand(SqlString,connection);//SqlString是数据库语句,下同
2.SqlCommand command=new Sqlcommand(connection);
3.SqlConnection conn=new Sqlconnection(SqlString);//S
SqlCommand command=new SqlCommand();
command.Connection=conn;
4.SqlCommand command=new SqlCommand(SqlString,connection);
SqlCommand command=conn.CreateCommand();
//给命令指定文本
CommandText属性 --->command.CommandText就是文本值,已经执行?
cmd.ExecuteScalar()//计算表中的行数?
cmd.ExecuteReader()//查询结果的语句.
cmd.ExecuteNonQuery()//查看是否更改了表中的行数.插入一行,ExecuteNonQuery返回+1,没有更改返回-1
cmd.Parameters.Add("@MyName",SqlDbType.VarChar,30);//怎么用??
cmd.Parameters.Add("@MyNumber",SqlDbType.Int);
//数据库的创建:
SqlCommand.CommandText="Creat DataBase MyDb";
conn.ChangeDatabase("myDb");
//表的创建:
SqlCommand.CommandText="Creat Table MyTempTable(COL1 integer,MyName varchar(30))";
//插入数据:
SqlCommand.CommandText="Insert into MyTempTable Values(37)";
**************************************************
使用数据读取器
**************************************************
SqlDataReader reader=cmd.ExecuteReader();
Console.WriteLine("下面用列名索引方法");
while (reader.Read())
{
Console.WriteLine("{0},{1}", reader["IP"].ToString(),reader["UserName"].ToString());
}
Console.WriteLine("下面用类型访问器方法");
while (reader.Read())
{
Console.WriteLine("{0},{1}",reader.GetString(1),reader.GetString(4));
}
reader.Close();//读取器使用完毕
//数据读取器的元数据属性和函数
Depth--->该属性表示当前的嵌套深度
FieldCount--->该属性表示结果集中的列数 如:reader.FieldCount
GetDataTypeName--->这方法接受索引,返回含有列数据类型名称的字符串 如:reader.GetDataTypeName(0)
GetFieldType--->这方法接受索引,返回对象的.NET Framework 数据类型 如:reader.GetFieldType(0)得到
System.Int32,而reader.GetDataTypeName(0)得到int
GetName--->这方法接受索引,返回指定列的名称
GetOrdinal--->这方法接受列名,返回列的索引
//获取表的数据(可调用数据读取器的GetSchemaTable方法,它返回System.Data.DataTable对象)
DataRow和DataColumn,
行和列由DataTable类的Rows和Columns属性以集合对象的形式返回
例:
SqlDataReader reader = cmd.ExecuteReader();
DataTable schema=reader.GetSchemaTable();
foreach (DataRow row in schema.Rows)
{
foreach (DataColumn col in schema.Columns)
Console.WriteLine(col.ColumnName.PadRight(32)+"="+row[col]);
Console.WriteLine("-------------------------------------");
}
//处理多个结果集
NexxtResult可以把读取器移到下一结果集
do
{
while(reader.Read())
{
Console.WriteLine("{0}:{1}",reader[0],reader[1]);
}
Console.WriteLine("".PadLeft(60,'='));///用60个'='号作为一段的结束
}while(reader.NextResult());
**************************************************
数据集和数据适配器
**************************************************
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, connection);//适配器
DataSet ds = new DataSet(); //数据集
da.Fill(ds, "Mylpt");//用Fill方法在内部使用数据读取器访问表模式和数据,然后使用它们填充数据集
DataTable dt=ds.Tables["Mylpt"];
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn col in dt.Columns)
Console.WriteLine(col.ColumnName.PadRight(15)+"="+row[col]);
Console.WriteLine("".PadRight(60,'='));
}
/*跟上面第一句有相同效果
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand=new SqlCommand(cmd.CommandText,connection);
*/
//数据集的筛选和排序
DataTableCollection dtc=ds.Tables;
string f1="country='Germany'";//Set display filter过滤
string srt="companyname asc";//Set sort 排序
foreach(DataRow row in dtc["customers"].Select(f1,srt){}
其它用法foreach(dataRow row in dtc[1].Rows){...row["productname"].ToString().PadRight(25)..}
**************************************************