C#数据库编程

数据库的连接
***************************************************************************
用代码吧,实际中很少用到直接拖连接.
先引用 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)..}
**************************************************

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值