我的问题是用SQL Server数据库。如何将大文件存储到SQL Server 2008中并检索所有文件?
我成功地存储数据到SQL Server表在C#中使用此代码:
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);
}
,并符合本规则进行检索:
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;
}
我成功地从dataTable中获取文件并将其保存到文件系统。但存储的文件量为0字节
或者13字节比数据库中存储的文件小得多。
阿巴斯,你在这里丢失代码..?你在哪里将它保存到'FileStream' ..? – MethodMan
您应该[在您的代码中阅读如何避免** SQL注入攻击**](http://www.a2zdotnet.com/View.aspx?Id=64#.URKpR2d9uK8)!您目前非常脆弱...... –
“我成功存储了数据”您怎么知道? (这不成功)。你甚至看过文件的内容吗?阅读关于如何做到这一点的教程。 – usr