2016-10-16 2 views
0

Я уже искал ошибкисоединения строка Свойство SqlConnection не инициализируется

строка свойство соединения не был инициализирован.

на Google, а также на переполнение стека, но не смог найти решение. Я создал класс базы данных для взаимодействия с базой данных, все связанные коды написаны в этом файле. Проблема в том, что тот же код отлично работает на других страницах, и он просто не работает на странице с именем «addevent.aspx». Я не понимаю, почему он работает неправильно.

Вот методы, которые я создал в database.cs файл

public void CreateConnection() 
{ 
    var ConfiguredString = ConfigurationManager.ConnectionStrings[ConnectionString].ConnectionString; 
    obj_sqlconnection = new SqlConnection(ConfiguredString); 

} 

//This property will set the connection string for database 
public string ConnectionString 
{ 
    get 
    { //if _connectionString is already created or set, only then it will return the value of _connectionString 
     if (_connectionString != string.Empty && _connectionString != "" && _connectionString != null) 
      return _connectionString; 
     else 
      return string.Empty; 
    } 
    // When you want to set the connection string set block is called. 
    set 
    { // this line sets the connection string to the _connectionString data member for the first time. 
     if (_connectionString == string.Empty || _connectionString == "" || _connectionString == null) 
      _connectionString = value; 
    } 
} 

// Open database connection.  
public void OpenConnection() 
{ 
    obj_sqlconnection.Open(); 
} 

// Close database connection. 
public void CloseConnection() 
{ 
    obj_sqlconnection.Close(); 
    obj_sqlconnection.Dispose(); 
} 

public SqlConnection GetCurrentConnection 
{ 
    get { return obj_sqlconnection; } 
    set { obj_sqlconnection = value; } 
} 

Я просто не понимаю логику этой ошибки и ее возникновения. Я получаю эту ошибку, когда я открываю соединение

Как я называю эти методы, я уже создал объект database.cs класса вне метода AddEvent с именем объекта MyDB

public int AddEvent(string _title, string _description, string _place, int _eventTypeID, string _startingTime, string _endingTime, string _startingDate, string _endingDate, string _creatorID, string _picture) 
{ 
    string[] blacklist = { _title, _description, _place, _picture }; 

    if (Jvalidate.FilterBlackLIstKeywords(blacklist)) 
    { 
     int eventid = Convert.ToInt32(mydb.GetLastValueByColumnName("event_id", "tbl_events")); 
     int rowsaffected = 0; 
     mydb.CreateConnection(); 

     mydb.InitializeSQLCommandObject(mydb.GetCurrentConnection, "spAddEvent", true); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@eventID", eventid + 1); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@title", _title); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@description", _description); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@place", _place); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@eventType", _eventTypeID); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@startingTime", _startingTime); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@endingTime", _endingTime); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@startDate", _startingDate); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@endDate", _endingDate); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@schoolID", SchoolID); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@eventCreatorID", _creatorID); 
     mydb.obj_sqlcommand.Parameters.AddWithValue("@eventPicture", _picture); 
     try 
     { 
      //mydb.obj_sqlconnection.ConnectionString = ConfigurationManager.ConnectionStrings["cesConnectionString"].ToString(); 
      mydb.OpenConnection(); 
      rowsaffected = mydb.obj_sqlcommand.ExecuteNonQuery(); 
     } 
     finally 
     { 
      mydb.CloseConnection(); 
      mydb.obj_sqlcommand.Dispose(); 
     } 
     return rowsaffected; 
    } 
    return 0; 
} 
+0

Пожалуйста, покажите, как вы используете методы класса – Steve

+0

Я обновил сообщение. Пожалуйста, просмотрите его там –

+0

Из этого кода я не могу быть уверен, откуда это происходит. На какой линии вы получаете исключение? Вы пытались использовать отладчик для проверки состояния соединения при возникновении исключения? – Steve

ответ

1

это слишком сложное решение ... это будет решить вашу проблему понимания и ненужных строк кода:

решение:

namespace Stackoverflow 
{ 
    public static class Solution 
    { 
     static readonly string _connectionStringName = 
      @"mainConnectionStringName"; 

     static readonly string _connectionString = 
      _connectionStringName.getConnectionString(); 

     // string extended method like .ToLower() or .Trim() 
     public static string getConnectionString(
      this string connectionStringName) 
     { 
      return 
       System. 
       Configuration. 
       ConfigurationManager. 
       ConnectionStrings[connectionStringName]. 
       ConnectionString; 
     } 

     public static object SqlExecute(
      string connectionStringName, 
      string storedProcedureName, 
      System 
       .Collections 
       .Generic 
       .Dictionary<string, object> parameters, 
      bool isScalar) 
     { 
      object result = null; 

      using (System 
         .Data 
         .SqlClient 
         .SqlConnection connection = 
       new System.Data.SqlClient.SqlConnection(
        string.IsNullOrWhiteSpace(connectionStringName) 
         ? _connectionString 
         : connectionStringName.getConnectionString())) 
       if (connection != null) 
        using (System.Data.SqlClient.SqlCommand command = 
         new System.Data.SqlClient.SqlCommand() 
         { 
          CommandText = storedProcedureName, 
          CommandType = System 
              .Data 
              .CommandType 
              .StoredProcedure, 
          Connection = connection 
         }) 
         if (command != null) 
         { 
          if (parameters != null) 
           foreach (System 
              .Collections 
              .Generic 
              .KeyValuePair<string, object> 
               pair in parameters) 
            command.Parameters.AddWithValue(
             pair.Key, pair.Value); 

          command.Connection.Open(); 

          result = isScalar 
           ? command.ExecuteScalar() 
           : command.ExecuteNonQuery(); 

          if (command.Connection.State == 
            System.Data.ConnectionState.Open) 
           command.Connection.Close(); 
         } 

      return result; 
     } 
    } 
} 

использования:

namespace SomeNamespace 
{ 
    public sealed class SomeClass 
    { 
     public int Example() 
     { 
      return (int)Stackoverflow 
       .Solution 
       .SqlExecute(
        @"anyConnectionStringName", // or null for main connection string 
        @"anyStoredProcedureName", 
        new System 
         .Collections 
         .Generic 
         .Dictionary<string, object>() 
        { 
         { @"field0", "value" }, 
         { @"field1", -1.5 }, 
         { @"field2", System.DateTime.Now }, 
         { @"field3", 3.5 }, 
         { @"field4", 7 }, 
        }, 
        false // for ExecuteNonQuery or true for ExecuteScalar 
       ); 
     } 
    } 
} 
Смежные вопросы