我想在一个
blob的MySQL数据库中插入一个PDF文件.
这是我用来插入的代码(我使用WebService和DataSet):
FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
byte[] MyData = new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
this._requete = "INSERT INTO stage_abstract(etuid, anac, pdf)
VALUES (" + 6 + ", " + 2009 + ", \"" + MyData + "\")";
int suc = 0;
using (this._ds)
{
suc = this._dbo.InsertUpdateDelete(ws, this._requete);
}
当我想获得并创建我的blob中的原始文件时,它似乎运行良好.但是,当我想打开我的新PDF文件时,Adobe表示该文件不受支持或已损坏…
这是我用来从我的blob获取信息的代码.我在DataSet(_ds)中收到信息:
this._requete = "SELECT stage_abstract.pdf as pdf
FROM stage_abstract
WHERE stage_abstract.etuid = " + 6 + "
AND stage_abstract.anac = " + 2009;
using (this._ds)
{
this._ds = this._dbo.select(this.ws, this._requete);
}
byte[] MyData = (byte[]) this._ds.Tables[0].Rows[0]["pdf"];
int ArraySize = new int();
ArraySize = MyData.GetUpperBound(0);
FileStream fs = new FileStream(@"C:\essairecup.pdf"
, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0, ArraySize);
fs.Close();
我该如何解决这个问题?我认为问题出在我插入的地方,因为我可以在我的blob中看到13o.
最佳答案 我不得不使用参数化的请求:
int tfeid = 222;
string fileName = "myFile";
string fullFileName = @"C:\myFile.pdf";
FileStream fs = new FileStream(fullFileName, FileMode.OpenOrCreate, FileAccess.Read);
byte[] MyData = new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
DbProviderFactory MFactory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
DbConnection Mconnect = MFactory.CreateConnection();
Mconnect.ConnectionString = ConfigurationManager.ConnectionStrings["ConnexionMySql"].ConnectionString;
Mconnect.Open();
DbCommand Mcommand = Mconnect.CreateCommand();
Mcommand.CommandText = "UPDATE tfe_abstract SET pdf = ?paramImg, pdfnom = \"" + fileName + "\" WHERE tfeid = " + tfeid;
DbParameter parametre = Mcommand.CreateParameter();
parametre.ParameterName = "paramImg";
parametre.Value = MyData;
Mcommand.Parameters.Add(parametre);
int result = Mcommand.ExecuteNonQuery();
Mconnect.Close();