嗨,这是我之前的问题的以下内容。
问题是当我试图更新由一个列表视图以 aspx 形式提交的 varbinary 时。每次我检索到相同的错误时:
I dati di tipo string o binary verrebbero troncati。L'istruzione è stata interrotta。所以字符串或二进制将被截断命令被中断。
我认为这是 asp.net 的问题,我尝试在服务器端使用 c# 使用以下代码拦截列表视图的事件 ItemInserting:
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();
}
}
但是用这段代码每次都是一样的错误。
我控制了桌子,但一切都是正确的。
真的我不知道还需要做什么。
谢谢
皮尔卡洛