重複の可能性:
Varbinary を asp.net 更新に処理する方法
こんにちは、前回の質問の続きです。
問題は、aspx フォームの 1 つのリストビューによってファイルされた varbinary を更新しようとしているときです。同じエラーを取得するたびに:
I dati di tipo string o binary verrebbero troncati. L'istruzione è stata interrotta. そのため、文字列またはバイナリが切り捨てられ、コマンドが中断されました。
私はそれがasp.netの問題であると考え、次のコードでリストビューのイベントItemInsertingをインターセプトするc#を使用してサーバー側で実行しようとしました:
RunSqlCommand は、コードの下に作成したクラスです。
protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
IOrderedDictionary NuoviValori = e.NewValues;
Label CodiceArticolo = (Label)ListView1.Items[e.ItemIndex].FindControl("CODICE_ARTICOLOLabel1");
string Descrizione = "";
string UM = "";
string Foto = "";
string TipoArt = "";
foreach (DictionaryEntry entry in NuoviValori)
{
switch (entry.Key.ToString())
{
case "DESCRIZIONE":
Descrizione = entry.Value.ToString();
break;
case "UM":
UM = entry.Value.ToString();
break;
case "FOTO":
if (entry.Value == null)
{
Foto = EncodeTo64("ADBC");
}
else
{
Foto = entry.Value.ToString();
}
break;
case "TIPO_ART":
TipoArt = entry.Value.ToString();
break;
}
}
e.Cancel = true;
string strCmd = "UPDATE TBL_ARTICOLI SET DESCRIZIONE = '" + Descrizione +"'," +
"UM = '" + UM +"'," +
"FOTO = @Foto," +
"TIPO_ART = '" + TipoArt + "' " +
"WHERE CODICE_ARTICOLO = '" + CodiceArticolo.Text + "'";
RunSqlCommand.Parametro parametro = new RunSqlCommand.Parametro();
parametro.Name = "Foto";
parametro.Tipo = SqlDbType.VarBinary;
parametro.Value = Convert.FromBase64String(Foto);
RunSqlCommand.Parametro[] Parametri = new RunSqlCommand.Parametro[1];
Parametri[0] = parametro;
string retCmd = new RunSqlCommand().RunSqlCmdParamDeltaSSL(strCmd, Parametri);
ListView1.EditIndex = -1;
}
static public string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes
= System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue
= System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
public struct Parametro
{
public SqlDbType Tipo;
public object Value;
public string Name;
}
public string RunSqlCmdParamDeltaSSL(string Command, Parametro[] Parameters)
{
int NumeroAffetto;
Connection ConnString = new Connection();
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString = ConnString.ConnectDeltaSSL();
SqlCommand Comando = new SqlCommand(Command, Conn);
foreach (Parametro param in Parameters)
{
SqlParameter picparameter = new SqlParameter();
picparameter.SqlDbType = param.Tipo;
picparameter.ParameterName = param.Name;
picparameter.Value = param.Value;
Comando.Parameters.Add(picparameter);
}
Comando.CommandType = System.Data.CommandType.Text;
try
{
Comando.Connection.Open();
NumeroAffetto = Comando.ExecuteNonQuery();
return NumeroAffetto.ToString();
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
Comando.Connection.Close();
}
}
しかし、このコードでは、同じ間違いをするたびに同じです。
テーブルをコントロールしましたが、すべて正しいです。
本当に私はもっと何をする必要があるのか わかりません。
ありがとうございました
ピエルカルロ