La raison de ce problème est que l'instruction SQL épissée est trop longue.
De manière générale, l'instruction d'exécution SQL d'Oracle ne peut pas dépasser 4000 caractères en anglais et 2000 caractères en chinois, donc une fois Clob s'il y en a. S'il y a beaucoup de champs, la longueur du SQL épissé
sera trop longue, ce qui entraînera des problèmes.
Une solution plus simple consiste à utiliser une requête paramétrée pour exécuter des instructions SQL. L'exemple de code est le suivant
OracleConnection Con = new System.Data.OracleClient.OracleConnection(connectStr); try { decimal MsgId = 20; string InsertSql = @"insert into MSG (ID, TITLE, CONTENT, SORT, TIME, AUTHOR, GROUP) values (:ID, :TITLE, :CONTENT, :SORT, :TIME, :AUTHOR, :GROUP)"; Con.Open(); OracleCommand cmd = new OracleCommand(InsertSql, Con); OracleParameter TITLE = new OracleParameter("TITLE", OracleType.NVarChar); OracleParameter CONTENT = new OracleParameter("CONTENT", OracleType.Clob); OracleParameter GID = new OracleParameter("GID", OracleType.NVarChar); OracleParameter SORT = new OracleParameter("SORT", OracleType.Number); OracleParameter TIME = new OracleParameter("TIME", OracleType.DateTime); OracleParameter AUTHOR = new OracleParameter("AUTHOR", OracleType.NVarChar); OracleParameter GROUP = new OracleParameter("GROUP", OracleType.NVarChar); TITLE.Value = Model.MsgTitle; CONTENT.Value = Model.MsgContent; ID.Value = Guid.NewGuid().ToString(); SORT.Value = MsgId; TIME.Value = DateTime.Now; AUTHOR.Value = Model.MsgAuthor; GROUP.Value = Model.GroupId; cmd.Parameters.Add(MSGTITLE); cmd.Parameters.Add(MSGCONTENT); cmd.Parameters.Add(MSGID); cmd.Parameters.Add(MSGSORT); cmd.Parameters.Add(MSGTIME); cmd.Parameters.Add(MSGAUTHOR); cmd.Parameters.Add(MGSGROUP); cmd.ExecuteNonQuery(); Con.Close(); } catch (Exception ex) { }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!