[英]How store a large file into SQL Server 2008 and retrieve all of it?
My problem is do with a SQL Server database. 我的问题是与SQL Server数据库有关。
I successfully stored data into a SQL Server table from C# with this code: 我使用以下代码成功地将数据从C#存储到SQL Server表中:
internal static void SaveAutocadFileOnDataBase(string MapCode, byte[] dataElecMap, string dataElecMapName,byte[] dataCivilMap, string dataCivilMapName, byte[] dataArchiMap, string dataArchiMapName,byte[]dataMechaMap,string dataMechaMapName)
{
string sqlcommand = string.Concat("INSERT INTO AutoCadFiles VALUES ('", MapCode, "' , ", "cast ('", dataElecMap, "' as varbinary(max)),", " '", dataElecMapName, "' ", " , cast ('", dataCivilMap, "' as varbinary(max)) ,", " '", dataCivilMapName, "' ", " , cast ('", dataArchiMap, "' as varbinary(max)) ,", " '", dataArchiMapName, "' "," , cast ('", dataMechaMap, "' as varbinary(max)) ,", " '", dataMechaMapName, "' ", ")"); ExecuteNonQuery(sqlcommand);
}
and retrieve it with this Code: 并使用以下代码进行检索:
internal static DataTable RetriveMaps(string MapNumber, string MapType)
{
string s = MapType + "Name";
string SqlCommand = string.Concat("SELECT ", MapType, " , ", s, " FROM AutoCadFiles WHERE MapCode='",MapNumber, "'");
return GetBinaryFiles(SqlCommand);
}
private static DataTable GetBinaryFiles(string SqlCommand)
{
SqlConnection SqlConnction = null;
DataTable dt = new DataTable();
SqlCommand sqlcom = GetConnection(SqlCommand, ref SqlConnction);
SqlDataReader sdldr = sqlcom.ExecuteReader();
dt.Load(sdldr);
return dt;
}
I successfully get file from dataTable and save it into the filesystem. 我成功地从dataTable中获取了文件并将其保存到文件系统中。 But the stored file volume is 0 byte
但是存储的文件量为0字节
Or 13 Byte very less than stored file in database. 或13字节,比数据库中存储的文件少得多。
Since you're retrieving a single row at a time, this simpler code would do the work for retrieving the data: 由于您一次只检索一行,因此以下简单的代码将完成检索数据的工作:
string fileName;
byte[] fileread;
SqlCommand command;
SqlConnection connection = MyGetSqlConnection();
connection.Open();
command = new SqlCommand("Select dataElecMapName From AutoCadFiles Where MapCode = @MapNumber", connection);
command.Parameters.Add("@MapNumber", SqlDbType.Int).Value = MapNumber;
fileName = (string)command.ExecuteScalar();
command.Dispose();
command = new SqlCommand("Select dataElecMap From AutoCadFiles Where MapCode = @MapNumber", connection);
command.Parameters.Add("@MapNumber", SqlDbType.Int).Value = MapNumber;
fileread = (byte[])command.ExecuteScalar();
string tempPath = MyFunc.GetTempDirectory();
FileStream fs = new FileStream(tempPath + fileName, FileMode.Create);
fs.Write(fileread, 0, fileread.Length);
System.Diagnostics.Process.Start(tempPath + fileName);
fs.Close();
EDIT Use this code to convert your file: 编辑使用此代码来转换您的文件:
public static byte[] ConvertFileToBytes(string location, ref string FileName)
{
FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
byte[] data = reader.ReadBytes((int)fs.Length);
fs.Close();
return data;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.