如何修复ios10iphone迅雷闪退修复版

2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年3月 总版技术专家分月排行榜第一
2013年7月 荣获微软MVP称号
本帖子已过去太久远了,不再提供回复功能。1298人阅读
数据库(11)
http://blog.csdn.net/yanjun_xiaoli/article/details/4002736
1.&创建DataReader对象&前面提到过没有构造函数创建DataReader对象。
通常我们使用Command类的ExecuteRader方法来创建DataReader对象:
&SqlCommand&cmd&=&new&SqlCommand(commandText,ConnectionObject)&
SqlDataReader&dr&=&cmd.ExecuteReader();&
DataReader类最常见的用法就是检索Sql查询或者存储过程返回的记录。
它是连接的只向前和只读的结果集,也就是使用它时,数据库连接必须保持打开状态,另外只能从前往后遍历信息,不能中途停下修改数据。&
注意:DataReader使用底层的连接,连接是它专有的,这意味这DataReader打开时不能使用对应连接进行去他操作,比如执行另外的命令等。
使用完DataReader后一定记得关闭阅读器和连接。
&2.&使用命令行为指定DataReader的特征&前面我们使用cmd.ExecuteReader()实例化DataReader对象,其实这个方法有重载版本,接受命令行参数,这些参数应该时Commandbehavior枚举:&SqlDataRader&dr&=&cmd.ExecuteReader(CommandBehavior.CloseConnection);&
上面我们使用的是CommandBehavior.CloseConnection,作用是关闭DataReader的时候自动关闭对应的ConnectionObject。
这样可以避免我们忘记关闭DataReader对象以后关闭Connection对象。
别告诉我你不喜欢这个参数,你能保证你记得关闭连接。
万一你忘记了呢?又或者你使用你的partner开发的组件来进行开发呢?
这个组件并不一定让你有关闭连接的权限哦。
另外CommandBehavior.SingleRow可以使结果集返回单个行,CommandBehavior.SingleResult返回结果为多个结果集的第一个结果集。
当然Commandbehavior枚举还有其他值,请参见msdn。
&3.&遍历DataReader中的记录&当ExecuteReader方法分会DataReader对象时,当前光标的位置时第一条记录的前面。必须调用数据阅读器的Read方法把光标移动到第一条记录,然后第一条记录就是当前记录。
如果阅读器包含的记录不止一条,Read方法返回一个bool值true。
也就是说Read方法的作用是在允许范围内移动光标位置到下一记录,有点类似rs.movenext,不是吗?如果当前光标指示着最后一条记录,此时调用Read方法得到false。
我们经常这样做:&While(dr.Reader())&{&//do&something&with&the&current&record&}&注意,如果你对每一条记录的操作可能花费比较长的时间,那么意味着阅读器将长时间打开,那么数据库连接也将维持长时间的打开状态。此时使用非连接的DataSet或许更好一些。&
4.&访问字段的值&有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。&Item属性&每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select&Fid,Fname&from&friend,则我们可以使用下面的方法取得返回的值:
&object&ID&=&dr[“Fid”];&object&Name&=&dr[“Fname”];&
或者:&object&ID&=&dr[0];&object&Name&=&dr[0];&注意索引总是从0开始的。
另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。&int&ID&=&(int)dr[“Fid”];&string&Name&=&(string)dr[“Fname”];&记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。&Get方法&起始我们在第一篇文章里面已经使用过改方法了。
每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net&clr&32位证书。
同上面的例子一样我们用如下方式访问Fid和Fname的值:&
int&ID&=&dr.GetInt32(0);&
string&Name&=&dr.GetString(1);&
注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。
另外Get方法不能使用字段名来访问字段,也就是说上面的没有:&int&ID&=&dr.GetInt32(“Fid”);&//错误&string&Name&=&dr.GetString(“Fname”);&
//错误&显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用
const:&const&int&FidIndex&=&0;&
const&int&NameIndex&=&1;&
int&ID&=&dr.GetInt32(FidIndex);&
string&Name&=&dr.GetString(NameIndex);&
这个办法并不怎么好,另外一个好一些的办法:
&int&NameIndex&=&dr.GetOrdinal(“Fname”);&//取得Fname对应的索引值
&string&Name&=&dr.GetString(NameIndex);&
这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。
&int&FidIndex&=&dr.GetOrdinal(“Fid”);&
int&NameIndex&=&dr.GetOrdinal(“Fname”);&
while(dr.Read())&
&int&ID&=&dr.GetInt32(FidIndex);
&string&Name&=&dr.GetInt32(NameIndex);&
/9315.html
datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改. 它有一个很重要的方法,是Read,是个布尔值,作用是前进到下一条数据,一条条的返回数据,当布尔值为真时执行,为假时跳出。如
while(dr.Read())
Response.write(dr[&UserName&]
dr.close();
以下是用户登录判断时候合法用户的代码
)Connection con = DB.WebConnection();//通过类调用连接上数据库
con.Open();//打开连接
SqlCommand com = new SqlCommand();
<mandText = &Select * from Users where UserName='& &#43; tbUserName.Text &#43; &'&;
<mandType = CommandType.T
com.Connection =
SqlDataReader reader = com.ExecuteReader();
if (reader.Read())
int UserID = reader.GetInt32(0);
string Password = reader[&UserPassword&].ToString();
string Password0 = tbUserPassword.T
if (Password == Password0)
Session[&uid&] = UserID;
Session[&name&] =tbUserName.T
Response.Redirect(&index.aspx&);
Response.Redirect(&login.aspx&);
Response.Redirect(&login.aspx&);
用这种方法不仅能判断用户名是否合法,还可以很方便地获取更多关于该用户的信息,其中,我比较喜欢用的是string Password = reader[&UserPassword&].ToString();这种方法,但是这种方法&#20284;乎不能获取int类型的字段数据,比如这里的UserId,只能用int UserID = reader.GetInt32(0);这种方法获取它的&#20540;。不知道用字段名有没有方法获取到UserId的&#20540;。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:60609次
积分:1117
积分:1117
排名:千里之外
原创:49篇
转载:30篇
评论:14条
(1)(1)(2)(2)(3)(1)(3)(4)(2)(9)(7)(1)(4)(21)(16)(2)(1)sql C#怎么得到自增id的值 - Sql Server当前位置:& &&&sql C#怎么得到自增id的值sql C#怎么得到自增id的值&&网友分享于:&&浏览:100次sql C#如何得到自增id的值我的数据表中id是自增已得到的 我想插入下一条数据如何得到它下一条记录分配给我的id 以前我是这样做的就是插入前先得到表中最后一列的id然后+1就是下一个id 可是别人说如果你的上一条记录被删了的话就不行了 以为系统分给过的id即使你把那条记录给删了他的id也是不会回收的,就相当于那个id被废弃了 比如我现在的id分配到了 18 结果我把第16,17,18这三条记录都删了,现在再添加记录时id任然是从18+1=19开始的。而我前面的做法得到的id却是 15+1=16 。& 请问如何得到正真系统将要给我分配的id 19 而不是16------解决方案--------------------不会呀。我用得是SQL 2005 你说的没错 删掉16,17,18这三条记录。在插入一跳。他的ID应该就是19 可能是没有在创建表的时候 .创建列 id int identity(1,1) 的原因吧。。或者是没有设为主键约束 alter table tb&
add constraint PK_id primary key(id) 的原因。。好好检查一下吧。
------解决方案--------------------有了自增列不知道为啥还要id呢。如果真的想去的当前插入的记录的id,那么可以在插入操作完成以后,再选最大id就是了呗。
------解决方案--------------------插入数据时,你返回插入数据的id不行吗?
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有随笔- 131&
&&&&&&&&&&&&&
引子:某年某日,公司Web程序被注入,导致数据库一塌糊涂。CIO大怒,要求以后所有数据库的交互行为都只能用SP,于是乎,即使是没有任何参数的一条查询语句也必须去到DB中加一条SP...
  项目实例:新入手一个项目,业务流程比较复杂,数据库交互很多,一条条的SP写的煞是烦人,尤其是在DAL中设置Command的Parameters,繁琐而又费眼睛,写多了很容易出错,因为不仅仅要考虑参数的个数,而且要考虑传的值阿对,值的类型阿对,对于Update之类的动作尤其烦人,一个Table,几十个字段,一个个写进去实在不是个简单的事情。这一块的典型代码如下:
典型设置SQL参数&
private readonly string _mConnectionString = ConstParameter.ConnectionS //获得ConnectionString,ConstParameter是用来根据Web.Config来获取对应开发环境的Stringvar conn = new SqlConnection(_mConnectionString); //New一个Connectioncmd = conn.CreateCommand();
//New一个Command</mandType = CommandType.StoredP
//设置 Command 类型mandText = &Store Procedure Name&; //设置 SP Name//以下是本文要解决的主要代码段&.....cmd.Parameters.Add(new SqlParameter("@Para1" , SqlDbType"));
cmd.Parameters["@Para1"].Value = Para1Vcmd.Parameters.Add(new SqlParameter("@Para2" , SqlDbType"));
cmd.Parameters["@Para2"].Value = Para2Vcmd.Parameters.Add(new SqlParameter("@Para3" , SqlDbType"));
cmd.Parameters["@Para3"].Value = Para3V.....&&
  过程:很痛苦的很煎熬的一条条的SP写完了,调试通过,进入UAT的阶段,我也相对轻松了。逛逛博客园,偶然看到一篇博文&&&,发现和我遇到的情况基本一样,完整的看完了,感觉用Attribute确实比较另类,看看实现方法,主要也是运用了反射,于是乎,我想何不用反射写个简单的类呢?实现起来应该不复杂的吧? 两个小时后,我交出了第一个版本,废话少说,看代码先:
首先定义一个实体类
public class ModelTestEvents
public int TestEventID { get; set; }
public string EpisodeStatus { get; set; }
public string SerialNumber { get; set; }
public string MaterialID { get; set; }
public int TestSeqNo { get; set; }
public string MaturityAtTest { get; set; }
public string TestStatus { get; set; }
public DateTime CreateDateTime { get; set; }
public string Tester { get; set; }
public string TestStation { get; set; }
public string WorkOrderID { get; set; }
public string TestComments { get; set; }
public string TestRev { get; set; }
下面自动设置SQL参数需要调用的方法&
SqlCSqlConnection conn = GetConn(mConnectionString, out cmd, te);//GetConn() 用来返回一个设置好了SqlCommand的SqlConnection,四个参数分别是ConnectionString,SqlCommand和你需要查询的实体。
GetConn():获取Connection
private SqlConnection GetConn(string mConnectionString, out SqlCommand cmd, ModelTestEvents te)
var conn = new SqlConnection(mConnectionString);
cmd = conn.CreateCommand();&
mandType = CommandType.StoredP
mandText = "TotalFailedTe";&
SetParameters(cmd, te);return
设置SqlCommand的参数
private static void SetParameters(SqlCommand cmd, object obj)
System.Reflection.PropertyInfo[] properties = obj.GetType().GetProperties();&&foreach (var propertyInfo in properties)
object value = propertyInfo.GetValue(obj, null);
if (value != null)
SqlDbType st = new SqlDbType();&&bool isAdd = false;
switch (propertyInfo.PropertyType.ToString())
case "System.SmallInt":
st = SqlDbType.SmallI
if (Convert.ToInt32(value) != 0)
isAdd = true;
case "System.Int32":
st = SqlDbType.I
if (Convert.ToInt32(value) != 0)
isAdd = true;
case "System.String":
st = SqlDbType.VarC
isAdd = true;
case "System.DateTime":
st = SqlDbType.DateT
if (value.ToString() != "1/1/:00 AM")
isAdd = true;
case "System.Bool":
st = SqlDbType.B
isAdd = true;
case "System.Guid":
st = SqlDbType.UniqueI
isAdd = true;
if (!isAdd) continue;
cmd.Parameters.Add(new SqlParameter("@" + propertyInfo.Name, st));
cmd.Parameters["@" + propertyInfo.Name].Value =
  思考:以上是很不成熟的第一个版本,也就停留在能够调试通过,能够不出错的运行下去而已,正好下班了。回家后,想了一下,觉得这段代码虽然实现了我的开始的需求(根据传入的实体和SP的名字,自动设置SQL的传参),但是可定制性不强,SetParameters()复杂且不易维护,并且性能也不是很好,还是有比较大的优化余地。理了下思路后,决定用Xml做一个Map来规范SystemType的Type和SqlDbType以及过滤条件的映射关系,并且用Cache来保存这个映射。修改后的第二个版本如下:
DAL层相关Code
private readonly string _mConnectionString = ConstParameter.ConnectionSpublic DataSet GetTestEvents(ModelTestEvents te,string spName,out string errMsg)
errMsg = "";
var ds = new DataSet();
var conn = new SqlConnection(_mConnectionString);
SetSqlParameters.GetCmd(conn, out cmd, te, spName);&&//...
Utility层的SetSqlParameters类
public class SetSqlParameters
{&&public static SqlConnection GetCmd(SqlConnection conn, out SqlCommand cmd, object obj, string spName)
cmd = conn.CreateCommand();
mandType = CommandType.StoredP
mandText = spN
SetParameters(cmd, obj);
}&&private static void SetParameters(SqlCommand cmd, object obj)
System.Reflection.PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (var propertyInfo in properties)
object value = propertyInfo.GetValue(obj, null);
if (value != null)
if (HttpContext.Current.Cache["SqlParasMap"] == null)
var ds = new DataSet();
ds.ReadXml(HttpContext.Current.Server.MapPath("SqlParasMap.xml"));
HttpContext.Current.Cache["SqlParasMap"] = ds.Tables[0];
DataRow[] dr =
((DataTable) HttpContext.Current.Cache["SqlParasMap"]).Select("System='" +
propertyInfo.PropertyType.Name +
if (dr.Count() & 0 && !value.ToString().Equals(dr[0]["Filter"]))
cmd.Parameters.Add(new SqlParameter("@" + propertyInfo.Name, dr[0]["SqlDbType"]));
cmd.Parameters["@" + propertyInfo.Name].Value =
Web层的Xml
&?xml version="1.0" encoding="utf-8" ?&&Types&
&System&SmallInt&/System&
&SqlDbType&SmallInt&/SqlDbType&
&Filter&0&/Filter&
&System&Int32&/System&
&SqlDbType&Int&/SqlDbType&
&Filter&0&/Filter&
&System&String&/System&
&SqlDbType&Varchar&/SqlDbType&
&Filter&Null&/Filter&
&System&DateTime&/System&
&SqlDbType&DateTime&/SqlDbType&
&Filter&1/1/:00 AM&/Filter&
&System&Boolean&/System&
&SqlDbType&Bit&/SqlDbType&
&Filter&Null&/Filter&
&System&Guid&/System&
&SqlDbType&UniqueIdentifier&/SqlDbType&
&Filter&Null&/Filter&
&/Type&&/Types&
  补充:关于这个这个Xml有必要说两句,&System&节点定义.Net类型,&SqlDbType&节点定义对应的Sql类型,&Filter&节点定义需要过滤的,也就是不需要加入参数的值,比如例中对于String没有限制,对于Int类型不为0。这里需要注意的是,如果有bool类型,在定义实体属性的时候,需要定义成Bool?,并且Set的时候把Bool值的起始值设为Null,不然在程序中无法判断,到底是用户设置的还是Bool的初始值。
其它一些使用说明:
(1) 实体类中的属性名字一定要和SQL中的参数名字一致
(2) 对于需要复杂定义的实体属性没法用,因为无法判定到底属性值是否为用户设置,当然你可以在Xml中设置Filter,不过如果这样搞,你的Xml就不能通用了。
  目前来看,程序可改进的地方仍然很多,欢迎各位牛人补充,指正。
&posted on
阅读(...) 评论()

我要回帖

更多关于 iphone迅雷闪退修复版 的文章

 

随机推荐