public System.IO.MemoryStream BlobRead(String tableName, String columnName, String criteria) { System.IO.MemoryStream dataStream = new System.IO.MemoryStream(); String selectStatement = "SELECT " + columnName + " FROM " + tableName + " WHERE " + criteria; System.Data.SqlClient.SqlCommand selectCommand = null; System.Data.SqlClient.SqlDataReader dataReader = null; try { OnDemandOpen(); selectCommand = (System.Data.SqlClient.SqlCommand)CreateCommand(selectStatement); dataReader = selectCommand.ExecuteReader(System.Data.CommandBehavior.Default); if (dataReader.Read()) { System.Data.SqlTypes.SqlBytes sourceBytes = dataReader.GetSqlBytes(0); if (sourceBytes.Buffer != null) { dataStream = new System.IO.MemoryStream(sourceBytes.Buffer); } else { dataStream = new System.IO.MemoryStream(); } } } catch (Exception sqlException) { SetLastException(sqlException); } finally { if (dataReader != null) { dataReader.Close(); } // end if if (selectCommand != null) { selectCommand.Dispose(); } // end if dataReader = null; selectCommand = null; OnDemandClose(); } return(dataStream); }
/// <summary> /// 备份指定的数据表。 /// </summary> /// <param name="Connection">已经打开的数据库连接。</param> /// <param name="xtw">XML 书写器。</param> /// <param name="TableName">数据表名称。</param> private void BackupTable(System.Data.SqlClient.SqlConnection Connection, System.Xml.XmlTextWriter xtw, string TableName) { xtw.WriteStartElement(TableName); System.Data.SqlClient.SqlDataReader sdr = null; System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(); comm.Connection = Connection; comm.CommandText = @"SELECT * FROM [" + TableName + "]"; sdr = comm.ExecuteReader(); try { for (int i = 0; i < sdr.FieldCount; i++) { xtw.WriteAttributeString(sdr.GetName(i), sdr.GetDataTypeName(i)); } while (sdr.Read()) { xtw.WriteStartElement("Row"); for (int i = 0; i < sdr.FieldCount; i++) { switch ((System.Data.SqlDbType)System.Enum.Parse(typeof(System.Data.SqlDbType), sdr.GetDataTypeName(i), true)) { case System.Data.SqlDbType.BigInt: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Bit: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Date: case System.Data.SqlDbType.DateTime: case System.Data.SqlDbType.DateTime2: case System.Data.SqlDbType.SmallDateTime: case System.Data.SqlDbType.Time: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.DateTimeOffset: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Decimal: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Float: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Int: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Money: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Char: case System.Data.SqlDbType.Text: case System.Data.SqlDbType.VarChar: case System.Data.SqlDbType.NChar: case System.Data.SqlDbType.NText: case System.Data.SqlDbType.NVarChar: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Real: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.SmallInt: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.SmallMoney: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.TinyInt: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.UniqueIdentifier: xtw.WriteElementString(sdr.GetName(i), sdr[i].ToString()); break; case System.Data.SqlDbType.Binary: xtw.WriteElementString(sdr.GetName(i), System.Text.Encoding.UTF8.GetString(sdr.GetSqlBytes(i).Value)); break; case System.Data.SqlDbType.VarBinary: xtw.WriteElementString(sdr.GetName(i), System.Text.Encoding.UTF8.GetString(sdr.GetSqlBytes(i).Value)); break; case System.Data.SqlDbType.Timestamp: xtw.WriteElementString(sdr.GetName(i), System.Text.Encoding.UTF8.GetString(sdr.GetSqlBytes(i).Value)); break; case System.Data.SqlDbType.Image: xtw.WriteElementString(sdr.GetName(i), System.Text.Encoding.UTF8.GetString(sdr.GetSqlBytes(i).Value)); break; case System.Data.SqlDbType.Structured: //此类型操作待处理 break; case System.Data.SqlDbType.Udt: //此类型操作待处理 break; case System.Data.SqlDbType.Variant: //此类型操作待处理 break; case System.Data.SqlDbType.Xml: //此类型操作待处理 break; } } xtw.WriteEndElement(); } } finally { sdr.Close(); } xtw.WriteEndElement(); }