Sql server 从SQL Server(fillSchema???)检测数据表中时间戳列的任何方法

Sql server 从SQL Server(fillSchema???)检测数据表中时间戳列的任何方法,sql-server,visual-studio,sql-server-2005,ado.net,Sql Server,Visual Studio,Sql Server 2005,Ado.net,当从“select*from sometable”更新datatable时,我迭代datatable中的列以基于datatable.rowstate和datatable.PrimaryKey动态创建update或insert语句 但是,我似乎找不到任何属性来指示列是否是SQL Server中的时间戳,因此必须在update语句中忽略它 我想说,您需要提前知道行类型。除非您编写的SQL脚本对要从中复制的表进行了描述并查找时间戳格式。请尝试使用SqlDataReader类的GetSchemaTabl

当从“select*from sometable”更新datatable时,我迭代datatable中的列以基于datatable.rowstate和datatable.PrimaryKey动态创建update或insert语句


但是,我似乎找不到任何属性来指示列是否是SQL Server中的时间戳,因此必须在update语句中忽略它

我想说,您需要提前知道行类型。除非您编写的SQL脚本对要从中复制的表进行了描述并查找时间戳格式。

请尝试使用SqlDataReader类的GetSchemaTable方法。它将返回每个列的元数据。您感兴趣的特定属性是DataTypeName和isRowVersion

string sql = "SELECT * FROM SomeTable";
using ( SqlConnection cn = new SqlConnection ())
{
   cn.ConnectionString = "Your Connection String";
   cn.Open ();
   using ( SqlCommand cmd = new SqlCommand ( sql, cn ) )
   {
      SqlDataReader dataReader = cmd.ExecuteReader ( CommandBehavior.KeyInfo );
      dataReader.Read ();

      DataTable dt = dataReader.GetSchemaTable ();
      foreach ( DataRow r in dt.Rows )
      {
        Console.WriteLine ( "Column name: {0}\t Data Type: {1}\t IsRowVersion:{2}", r["ColumnName"].ToString (), r["DataTypeName"].ToString (), r["isRowVersion"].ToString() );
      }

    }
 }

我只是想找出一个方法,而不是确认你不知道怎么做。谢谢蒂姆。此外,请参阅:“IsUnique”-仅对时间戳列为true,对所有其他列为false。