2013-06-20 22 views
0

У меня есть таблица, содержащая столб clob. Я хочу сохранить данные HTML в это (C#). Когда я сохраняю, я получаю сообщение об ошибке: String Literal слишком длинный. Длина строки Я храню 8048 символовСтрока Литература слишком длинная для Clob type

Может ли кто-нибудь мне помочь? Заранее спасибо таблицы: CREATE TABLE tblhelp ( GRID LONG )

private string getHTML(GridView gv) 
{ 
    StringBuilder sb = new StringBuilder(); 
    StringWriter textwriter = new StringWriter(sb); 
    HtmlTextWriter htmlwriter = new HtmlTextWriter(textwriter); 
    gv.RenderControl(htmlwriter); 
    htmlwriter.Flush(); 
    textwriter.Flush(); 
    htmlwriter.Dispose(); 
    textwriter.Dispose(); 
    return sb.ToString(); 
} 
public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
     server control at run time. */ 
    return; 
} 
protected void btnTest_Click(object sender, EventArgs e) 
{ 
// string grid = getHTML(GridView1); 
    TextBox7.Text = getHTML(GridView1);  
    OdbcConnection DbConnection1 = new OdbcConnection(con1); 
    try 
    { 
     DbConnection1.Open(); 
     OdbcCommand DbCommand1 = DbConnection1.CreateCommand(); 
     //DbCommand1.CommandText = "UPDATE TBL_ITHELPDESK SET STATUS='"+ chkClosed.Text +"',CLOSED_BY='"+drpClosedBy.Text+"',CLOSED_ON=TO_DATE('"+txtClosedOn.Text.ToString().Trim()+"','MM-DD-YYYY')WHERE CALL_NO='" + txtCallNo.Text + "'"; 
     DbCommand1.CommandText = "insert into tblhelp(grid) values('" + TextBox7.Text.Replace("'", "''").Trim() + "')"; 
    TextBox7.Text=DbCommand1.CommandText.ToString(); 
     int t1 = DbCommand1.ExecuteNonQuery(); 
     if (t1 == 1) 
     { 
      DbConnection1.Close(); 

     } 
     else 
     { 
     } 
    } 
    catch (Exception ex) 
    { 

    } 
} 
+1

Post определение таблицы и вставить код, чтобы мы могли видеть, что происходит. – DonBoitnott

+0

обновлен код. спасибо за ответ – Shanna

ответ

2

Используйте параметр команды:

try 
{ 
    DbConnection1.Open(); 
    OdbcCommand DbCommand1 = DbConnection1.CreateCommand(); 
    DbCommand1.CommandText = "INSERT INTO tblhelp (grid) VALUES (?)"; 
    OdbcParameter param1 = new OdbcParameter("param1", OdbcType.VarChar); 
    param1.Value = TextBox7.Text; 
    DbCommand1.Parameters.Add(param1); 
    Int32 t1 = DbCommand1.ExecuteNonQuery(); 
    if (t1 == 1) 
    { 
     DbConnection1.Close(); 
    } 
    else 
    { 
    } 
} 
catch (Exception ex) 
{ 
    //do something! 
} 
+0

Я пробовал это. и он не работает. запрос выглядит так: вставляем в значения tblhelp (grid) (@ Data0) – Shanna

+0

Спасибо за ответ – Shanna

+0

Перечисление 'OdbcType.VarChar' является подозрительным, поскольку я не знаком с ним. Проверьте эту ссылку для полного списка и выберите тип, который вам кажется уместным: http://msdn.microsoft.com/en-us/library/system.data.odbc.odbctype.aspx – DonBoitnott

2

Строка буквальный ограничен до 4000 байт. Если вы пытаетесь вставить данные в CLOB, ваш код должен будет использовать переменные связывания и привязать данные LOB (которые вы должны делать по ряду других причин, связанных с безопасностью и производительностью). Исправленная вами ошибка подразумевает, что вы делаете что-то вроде создания инструкции SQL в строке, содержащей литеральные данные, которые вы хотите вставить.

Смежные вопросы