zoukankan
html css js c++ java
一个程序详细研究DataReader(转)
//
***********************************************************
//
*名称:一个程序详细研究DataReader,同时显示Command用法
//
*功能:演示DataReader的各项操作。
//
*说明:如果需要文字说明请查看我的BLOG里面关于ado.net的文章
//
*作者:雪冬寒
//
*BOLG:
http://blog.csdn.net/bineon
//
***********************************************************
using
System;
using
System.Data;
using
System.Data.SqlClient;
using
System.Data.OleDb;
class
SqlReader
{
const
string
connStr
=
"
data source=bineon;user id=sa;password=87345587;initial catalog=contract
"
;
SqlConnection conn;
public
SqlReader()
{
conn
=
new
SqlConnection(connStr);
}
//
**************************************
//
*演示DataReader的两种取值方法
//
**************************************
public
void
basicReader()
{
string
sql
=
"
select * from friend
"
;
SqlCommand cmd;
cmd
=
conn.CreateCommand();
cmd.CommandText
=
sql;
conn.Open();
SqlDataReader reader
=
cmd.ExecuteReader();
while
(reader.Read())
{
Console.WriteLine(
"
No:{0}\tName:{1}\tPhoneNum:{2},\tAddress:{3}
"
,reader.GetInt32(
0
).ToString(),reader.GetString(
1
),reader[
2
].ToString(),reader[
"
Faddress
"
].ToString());
}
showSplit();
reader.Close();
conn.Close();
}
//
**************************************
//
*演示带参数查询的操作,使用SqlCilent
//
**************************************
public
void
hasParamReader()
{
SqlCommand cmd;
cmd
=
conn.CreateCommand();
string
sql
=
"
select Fname,Fphone,Faddress from friend where Fid > @Fid
"
;
cmd.CommandText
=
sql;
SqlParameter param
=
new
SqlParameter(
"
@Fid
"
,SqlDbType.Int,
4
);
param.Value
=
15
;
cmd.Parameters.Add(param);
conn.Open();
//
当关闭reader的时候同时关闭数据库连接
SqlDataReader reader
=
cmd.ExecuteReader(CommandBehavior.CloseConnection);
while
(reader.Read())
{
Console.WriteLine(
"
Name:{0}\tPhoneNum:{1}\tAddress:{2}
"
,reader.GetString(
0
),reader.GetString(
1
),reader.GetString(
2
));
}
showSplit();
//
无需关闭conn,系统会自动调用这个方法来关闭conn的。
reader.Close();
}
//
**************************************
//
*演示带参数查询的操作,使用OleDb
//
**************************************
public
void
hasOledbParamReader()
{
SqlCommand cmd;
cmd
=
conn.CreateCommand();
string
sql
=
"
select Fname,Fphone,Faddress from friend where Fid > ?
"
;
string
oledbConnStr
=
"
Provider=sqloledb;
"
+
connStr;
OleDbConnection oleConn
=
new
OleDbConnection(oledbConnStr);
OleDbCommand oleCmd
=
new
OleDbCommand(sql,oleConn);
oleCmd.Parameters.Add(
"
nothing
"
,
15
);
oleConn.Open();
OleDbDataReader oleReader
=
oleCmd.ExecuteReader();
while
(oleReader.Read())
{
Console.WriteLine(
"
Name:{0}\tPhoneNum:{1}\tAddress:{2}
"
,oleReader.GetString(
0
),oleReader.GetString(
1
),oleReader.GetString(
2
));
}
showSplit();
oleReader.Close();
oleConn.Close();
}
//
**************************************
//
*演示存储过程的输出参数
//
**************************************
public
void
outParamShow()
{
SqlCommand cmd;
cmd
=
conn.CreateCommand();
cmd.CommandText
=
"
GetInfo
"
;
cmd.CommandType
=
CommandType.StoredProcedure;
SqlParameter param
=
cmd.Parameters.Add(
"
@Fid
"
,
16
);
param
=
cmd.Parameters.Add(
"
@Fname
"
,SqlDbType.VarChar,
8
);
param.Direction
=
ParameterDirection.Output;
param
=
cmd.Parameters.Add(
"
@Fphone
"
,SqlDbType.VarChar,
8
);
param.Direction
=
ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
string
Fname
=
cmd.Parameters[
"
@Fname
"
].Value.ToString();
string
Fphone
=
cmd.Parameters[
"
@Fphone
"
].Value.ToString();
Console.WriteLine(Fname
+
"
"
+
Fphone);
conn.Close();
showSplit();
}
//
**************************************
//
*演示读取多个无关记录集
//
**************************************
public
void
multiResult()
{
SqlCommand cmd;
cmd
=
conn.CreateCommand();
string
sqla
=
"
select Fname from friend
"
;
string
sqlb
=
"
select Fphone from friend
"
;
cmd.CommandText
=
sqla
+
"
;
"
+
sqlb;
conn.Open();
SqlDataReader reader
=
cmd.ExecuteReader();
int
i
=
1
;
do
{
Console.WriteLine(
"
第
"
+
i.ToString()
+
"
个记录集内容如下:\n
"
);
while
(reader.Read())
{
Console.WriteLine(reader[
0
].ToString()
+
"
\t
"
);
}
i
++
;
}
while
(reader.NextResult());
//
NextResult()移动到下一个记录集
reader.Close();
conn.Close();
showSplit();
}
//
**************************************
//
*使用DataReader获得数据库模式信息
//
**************************************
public
void
getSchema()
{
SqlCommand cmd;
cmd
=
conn.CreateCommand();
string
sql
=
"
select Fid,Fname,Fphone from friend
"
;
cmd.CommandText
=
sql;
conn.Open();
SqlDataReader reader
=
cmd.ExecuteReader();
DataTable SchemaTable
=
reader.GetSchemaTable();
DataRowCollection SchemaColumns
=
SchemaTable.Rows;
DataColumnCollection SchemaProps
=
SchemaTable.Columns;
foreach
(DataRow SchemaColumn
in
SchemaColumns)
{
foreach
(DataColumn SchemaColumnProp
in
SchemaProps)
{
Console.WriteLine(SchemaColumnProp.ColumnName
+
"
=
"
+
SchemaColumn[SchemaColumnProp.ColumnName].ToString());
}
}
reader.Close();
conn.Close();
showSplit();
}
//
**************************************
//
*从数据库读取二进制数据的代码段
//
*该代码段只是读取二进制的片断,不是
//
*整个程序,所以不能执行,你可以把它
//
*集成到你的WinForm项目里面。
//
**************************************
public
void
getBinary()
{
/**/
/*
System.IO.MemoryStream stream = new System.IO.MemoryStream();
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
int BufferSize = 1024;
byte[] Buffer = new Byte[BufferSize];
long Offset = 0;
long BytesRead = 0;
do
{
BytesRead = reader.GetBytes(2,Offset,Buffer,0,BufferSize);
writer.Writer(Buffer,0,(int)BytesRead);
writer.Flush();
Offset += BytesRead;
}
while(BytesRead == BufferSize);
*/
}
//
添加输出分隔
private
void
showSplit()
{
Console.WriteLine(
"
\n********************************************************************\n
"
);
}
public
static
void
Main(
string
[] args)
{
SqlReader sqlreader
=
new
SqlReader();
sqlreader.basicReader();
sqlreader.hasParamReader();
sqlreader.hasOledbParamReader();
sqlreader.outParamShow();
sqlreader.multiResult();
sqlreader.getSchema();
}
}
查看全文
相关阅读:
redis 专题 (一)总纲和命令
CentOS 7安装 .net core 环境
IdentityServer4 学习笔记(一)客户端模式
IdentityServer4 学习笔记(开篇)
ASP.NET Core 自定义视图路径及主题切换
ASP.NET 国密加密 SM2-SM4
ASP.NET Framework 如何利用nuget打包,并发布到nuget平台
ASP.NET Core 在windows服务器安装dotnet-hosting-2.2.6-win 时出现应用程序池停止问题的解决方案
三分钟学会Redis在.NET Core中做缓存中间件
ASP.NET CORE 2.2 因外键设置的双向导航对象序列化报 循环错误问题的解决
原文地址:https://www.cnblogs.com/kokoliu/p/615322.html
最新文章
Kuangbin专题 最短路
CF1133A~F
ZJU-Maximum Territories(凸包)
P2756 飞行员配对方案问题(最大流)
P2754 星际转移问题(最大流)
CF1144A~G
P1251餐厅计划问题(最小费用最大流)
P1231教辅的组成(最大流+拆点)
跨域是什么?以及如何解决跨域问题
使用antd中的select选择器、日期选择、Cascader组件等下拉组件下拉框偏移错位(选项和下拉选择框分离)
热门文章
vue中调了接口之后拿不到后台返回的值(解决异步问题)
vue中阻止快速点击两次提交按钮调两次接口
判断一个对象是否为空的方法
indexOf和includes查找元素
上传文件功能,前后端传参,传参成formData的形式
sqlserver数据库中隐藏字符遇到的坑
redis 专题 (四)List操作
redis 专题 (三)set和zset操作
redis 专题 (二)哈希操作
redis 专题 (一)字符串操作
Copyright © 2011-2022 走看看