2011-03-03 23 views
1

Справочная информация: Я пытаюсь добавить данные в базу данных SQL с C#. В настоящее время я делаю это в своем скрипте в другом классе, поэтому я использую тот же код (работает код). Тем не менее, мой текущий класс использует кучу переработанного кода, и у меня возникают проблемы с сокращением, почему я не могу писать в БД. Ниже приведен код, который я использую, и он разбит на минимальный код голых костей.C# Добавление данных в базу данных SQL

Что я прошу: Кто-нибудь, чтобы указать на какую-то туманную ошибку, которую я сделал, или идеи, где можно устранить неполадки. В настоящее время я просто смотрю на этот код и не вижу, что случилось.

Заранее благодарен!

public void AddAttachmentToDB(XmlNode root, XmlNamespaceManager xmlns, string MessageID, string MailBoxAliasName) 
{ 
    //open DB 
    #region Open DB 
    if (DbConnection.State != System.Data.ConnectionState.Open) 
    { 
     try 
     { 
      this.DbConnection.ConnectionString = DbConnectionString; 
      this.DbConnection.Open(); 
      MailboxListener._logging.LogWrite("[{0}] opened DB Connection in AddAttachmentToDB!", 
       LoggingLevels.Error, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       this.DbConnectionString); 
     } 
     catch (Exception ex) 
     { 
      MailboxListener._logging.LogWrite("[{0}] Failed to open DB Connection! For Machine: {1}", 
       LoggingLevels.Error, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       this.DbConnectionString); 
      MailboxListener._logging.LogWrite("[{0}] Error Returned: {1}", 
       LoggingLevels.Error, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       ex.Message.ToString()); 
     } 
    } 
    else 
    { 
     MailboxListener._logging.LogWrite("[{0}] Failed to open DB Connection in AddAttachmentToDB!", 
       LoggingLevels.Error, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       this.DbConnectionString); 
    } 
      #endregion 
    //once db is open try this 
    try 
    { 
     //create test variables  
     string strMailBoxAliasName = MailBoxAliasName; 
     string AttachmentFilename = string.Empty; 
     string strfiletype = string.Empty; 
     string AttachmentStream = string.Empty; 
     string strAttachmentID = string.Empty; 
     string strMessageID = string.Empty; 
     strMessageID = MessageID; 

     //fill test variables 
     AttachmentFilename = "yumyum"; 
     AttachmentStream = "Cheetos"; 
     strMessageID = "123"; 
     strMailBoxAliasName = "user"; 
     strfiletype = ".txt"; 
     strAttachmentID = "12345"; 

     //create sql insert string 
     String insString = @"INSERT INTO MailboxListenerAttachments Values (@attachmentfilename, @attachmentbody, 
     @messageID, @mailboxname, @filetype, @attachmentID, @DateAddedToDB)"; 

     //create sql command string 
     SqlCommand myCommand = new SqlCommand(insString, this.DbConnection); 

     //add fill test variables to sql insert string 
     myCommand.Parameters.Add("@attachmentfilename", SqlDbType.VarChar, 100); 
     myCommand.Parameters["@attachmentfilename"].Value = AttachmentFilename; 
     myCommand.Parameters.Add("@attachmentbody", SqlDbType.VarChar, 8000); 
     myCommand.Parameters["@attachmentbody"].Value = AttachmentStream.Trim(); 
     myCommand.Parameters.Add("@messageID", SqlDbType.VarChar, 500); 
     myCommand.Parameters["@messageID"].Value = strMessageID; 
     myCommand.Parameters.Add("@mailboxname", SqlDbType.VarChar, 100); 
     myCommand.Parameters["@mailboxname"].Value = strMailBoxAliasName; 
     myCommand.Parameters.Add("@filetype", SqlDbType.VarChar, 50); 
     myCommand.Parameters["@filetype"].Value = strfiletype; 
     myCommand.Parameters.Add("@attachmentID", SqlDbType.VarChar, 50); 
     myCommand.Parameters["@attachmentID"].Value = strAttachmentID; 
     myCommand.Parameters.Add("@DateAddedToDB", SqlDbType.DateTime); 
      myCommand.Parameters["@DateAddedToDB"].Value = DateTime.UtcNow.ToString(); 

     //run sql command 
     myCommand.ExecuteNonQuery(); 

     //log sql command events 
     MailboxListener._logging.LogWrite(
       "[{0}] Added attachment {1} to database for messageID: {2}", 
       LoggingLevels.Informational, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       AttachmentFilename, 
       strMessageID 
      ); 
     //if DB is open, close it 
     if (DbConnection.State == System.Data.ConnectionState.Open) 
     { 
      this.DbConnection.Close(); 
     } 
    } 
    //catch errors 
    catch (Exception ex) 
    { 
     MailboxListener._logging.LogWrite("[{0}] Error Returned: {1}", 
       LoggingLevels.Error, 
       System.Reflection.MethodBase.GetCurrentMethod().ToString(), 
       ex.Message.ToString()); 
    } 
} 
+2

Сообщено об ошибке? Знание сообщения об ошибке поможет. – BlueMonkMN

+0

Вы получаете исключение? –

+0

никаких ошибок и исключений. Вот почему я в убыток. Я знаю, что код работает полностью, потому что другой класс записывает в БД. – toosweetnitemare

ответ

3

Не знаю, почему это не работает, но этот код вопит для рефакторинга:

public void AddAttachmentToDB(
    XmlNode root, 
    XmlNamespaceManager xmlns, 
    string MessageID, 
    string MailBoxAliasName 
) 
{ 
    var strMailBoxAliasName = MailBoxAliasName; 
    var AttachmentFilename = "yumyum"; 
    var AttachmentStream = "Cheetos"; 
    var strMessageID = "123"; 
    var strMailBoxAliasName = "user"; 
    var strfiletype = ".txt"; 
    var strAttachmentID = "12345"; 

    // Use DateTime when working with dates 
    var dates123 = new DateTime(2011, 2, 3); 

    try 
    { 
     using (var conn = new SqlConnection(DbConnectionString)) 
     using (var cmd = conn.CreateCommand()) 
     { 
      conn.Open(); 
      cmd.CommandText = @"INSERT INTO MailboxListenerAttachments Values (@attachmentfilename, @attachmentbody, @messageID, @mailboxname, @filetype, @attachmentID, @DateAddedToDB"; 

      cmd.Parameters.AddWithValue("@attachmentfilename", AttachmentFilename); 
      cmd.Parameters.AddWithValue("@attachmentbody", AttachmentStream.Trim()); 
      cmd.Parameters.AddWithValue("@messageID", strMessageID); 
      cmd.Parameters.AddWithValue("@mailboxname", strMailBoxAliasName); 
      cmd.Parameters.AddWithValue("@filetype", strfiletype); 
      cmd.Parameters.AddWithValue("@attachmentID", strAttachmentID); 
      cmd.Parameters.AddWithValue("@DateAddedToDB", dates123); 

      cmd.ExecuteNonQuery(); 
     } 
    } 
    catch (Exception ex) 
    { 
     // TODO: Log the exception and propagate it 
     throw ex; 
    } 
} 
+0

Спасибо Дарин. Я собираюсь попробовать этот повторный факторинг через несколько минут – toosweetnitemare

+0

спасибо за даррин.это с некоторым редактированием работало для меня. – toosweetnitemare

0

Должно ли Dates123 быть типа DateTime вместо строки?

+0

Я был моей ошибкой, пытаясь дезинформировать код. im меняет это сейчас. – toosweetnitemare

+0

Значение, которое вы предоставили, по-прежнему является строкой и должно быть DateTime. Удалите ToString. – BlueMonkMN

0

Я думаю, вам нужно указать входные/выходные направления для всех paramters. , например: myCommand.Parameters["@attachmentfilename"].Direction = ParameterDirection.Input

0

Если вы действительно не имеете ни малейшего представления, вы можете попробовать

  1. Исправьте вставки заявление так явно имена столбцов может быть, ваша упорядоченности неправильно и вставить заявления, не работает
  2. ваши установка параметров длины до максимальных значений длины столбца, возможно, вам необходимо установить их в фактический параметр значения длина
  3. Я действительно думаю, что Dates123 - это действительно самая важная проблема здесь, это должно быть DateTime not string.

Итак, вы изменили его, но вы все равно вызываете DateTime.UtcNow.ToString(), оставьте его как тип DateTime, а не строку.

+0

извините даты123 была моя ошибка, дезинфицирующая мой код. я изменил это – toosweetnitemare

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