byte[] _lastChange;
//_lasgChange值是从SQLServer中提取的timestamp类型的字段值
在生成更新数据库的SQL语句如下
string sql="update a set a.f1='123' where a.fLastChange="+lastChangeStringpublic lastChangeString
{
get
{
??应该如何写才能将_lastChange转换为可以将上述SQL语句补充完整的字符串
}
}

解决方案 »

  1.   

            public string lastChangeString
            {
                get
                {
                    string t=BitConverter.ToString(_lastChange);
                    t=t.Replace("-","");
                    return "0x"+t;
                }
            }
    这样是可以了,不知道有没有别的办法
      

  2.   

    --时间戳类型和bigint互相转化示例:by jinjazzset nocount on
    --申明3个时间戳
    declare @timeFlag1 bigint
    declare @timeFlag2 bigint
    declare @timeFlag3 bigint--建立表,timestamp类型不需要字段名
    create table test(timestamp,a int)--插入1 记录时间戳,@@dbts为数据库时间戳
    insert into test select null,1
    set @timeFlag1=cast(@@dbts as bigint)--插入2 记录时间戳
    insert into test select null,2
    set @timeFlag2=cast(@@dbts as bigint)--更新3 记录时间戳
    update test set a=3 where a=2
    set @timeFlag3=cast(@@dbts as bigint)--时间戳1的记录
    select *from test where timestamp=cast(@timeFlag1 as varbinary(8))
    --时间戳2的记录已经不存在了
    select *from test where timestamp=cast(@timeFlag2 as varbinary(8))
    --时间戳3的记录
    select *from test where timestamp=cast(@timeFlag3 as varbinary(8))--删除表
    drop table test
    set nocount off/*--测试结果
    timestamp          a
    ------------------ -----------
    0x000000000000B553 1timestamp          a
    ------------------ -----------timestamp          a
    ------------------ -----------
    0x000000000000B555 3
    */
      

  3.   

    到客户端都用bigint处理,不用把二进制数据暴露到数据库之外
      

  4.   

    不要试图来转换特殊的数据类型到字符串,而最好使用Parameter来传递参数值,比如如下:
    string sql="update a set a.f1='123' where a.fLastChange=@fLastChange";SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = sql;SqlParameter para= new SqlParameter("@fLastChange", SqlDbType.Timestamp);
    para.Value = timestr;cmd.Parameters.Add(para);
    cmd.ExecuteNonQuery();
    还有类似的对二进制的处理,比如存储图片等数据,使用Parameter是正确的处理方法。
      

  5.   

    哦,上面的timestr是数据库里取出的Timestamp类型的值,可以不用任何转换,就使用Object类型就可以了:
    object _lastChange=getDBTimeStamp();string sql="update a set a.f1='123' where a.fLastChange=@fLastChange";SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = sql;SqlParameter para= new SqlParameter("@fLastChange", SqlDbType.Timestamp);
    para.Value = lastChange;cmd.Parameters.Add(para);
    cmd.ExecuteNonQuery();