我正試圖發送SqlPrameter
到wcf服務。我試圖發送的SqlParameter參數包括字符串,整數和字節(我將數據庫中的文件存儲在varbinary中)。該如何將SqlParameter發送到SQLParameter包含字節[]的WCF?
下面是我用我的應用程序的C#代碼:
Public Function InsertadanceClaimAttachMents(ByVal params As SqlParameter()) As Integer Implements IService.InsertadanceClaimAttachMents
Dim i As Int16
Try
sql = ""
sql = "Proc_InsertAdvanceClamAtt"
i = Db.ExecProcedure(Declarations.ConnectionString, sql, params)
Return i
Catch ex As Exception
Db.WriteErrorLog(ex, "Wcf_DBAccess.vb", "InsertadanceClaimAttachMents")
Return 0
End Try
End Function
下面是我用我的WCF服務的VB功能
public bool insertAdvanceAttachments(Byte[] bytes, string filename, string ClaimNo, string mkrid)
{
Int32 I;
SqlConnection con = new SqlConnection(conn);
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Proc_InsertAdvanceClamAtt";
cmd.Parameters.AddWithValue("@img", bytes);
cmd.Parameters.AddWithValue("@imgname", filename);
cmd.Parameters.AddWithValue("@ClaimNo", ClaimNo);
cmd.Parameters.AddWithValue("@mkrid", mkrid);
try
{
con.Open();
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
//finally { con.Close(); }
//try
//{
// // string param, paramval;
// //param = "@img|@imgname|@ClaimNo|@mkrid";
// //paramval = ASCIIEncoding.ASCII.GetString(bytes).ToString() + "|" + filename + "|" + ClaimNo + "|" + mkrid;
// //SqlParameter[] param = { new SqlParameter("@img", bytes), new SqlParameter("@imgname", filename), new SqlParameter("@ClaimNo", ClaimNo), new SqlParameter("@mkrid", mkrid) };
// SqlParameter[] param = { new SqlParameter("@img", SqlDbType.VarBinary, bytes.Length, ParameterDirection.Input, false, 0, 0, "Data", DataRowVersion.Current, (SqlBinary)bytes), new SqlParameter("@imgname", filename), new SqlParameter("@ClaimNo", ClaimNo), new SqlParameter("@mkrid", mkrid) };
// I = baz_obj.InsertadanceClaimAttachMents(param);
// return true;
//}
//catch (Exception ex)
//{
// return false;
//}
return true;
}
的問題是,我甚至無法獲得WCF服務得到以下錯誤:
There was an error while trying to serialize parameter
http://tempuri.org/:params .
The InnerException message was 'Type 'System.Data.SqlTypes.SqlBinary' with data contract name 'base64Binary: http://www.w3.org/2001/XMLSchema ' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details
UPDATE
SqlParameter[] param = { new SqlParameter("@img", SqlDbType.VarBinary), new SqlParameter("@imgname", SqlDbType.VarChar), new SqlParameter("@ClaimNo", SqlDbType.VarChar), new SqlParameter("@mkrid", SqlDbType.VarChar) };
param[0].Value = bytes;
param[1].Value = filename;
param[2].Value = ClaimNo;
param[3].Value = mkrid;
您爲'@ img'設置的參數類型是什麼? –
你想通過WCF發送一個SqlParameter嗎?這是一個可怕的想法。這將是一個巨大的安全問題,我很確定SQLParameter是不可序列化的。只需將您的**數據**發送到您的服務,並讓它創建SqlParameters – Liam
您的抽象內容正在泄漏...... –