2013-04-24 22 views
6

Używam Microsoft Enterprise Lip II mają tę metodę do wstawiania zasobów na stronie internetowej Dostaję ten błąd w dół i nie sądzę, że jest to problem uprawnień i naprawdę nie wiem, jak rozwiązać it.by sposób przetestować connectionStrings i działać dobrzeFormat ciąg inicjowania nie jest zgodny ze specyfikacją zaczynającą się od indeksu 0

<connectionStrings> 
    <add name="SiteSqlServer" 
     connectionString="Data Source=.;Initial Catalog=databaseName;User ID=sa;Password=***"/> 
    </connectionStrings> 

public static int Insert(Resoursce r) 
     { 
      Database objDB = new SqlDatabase("SiteSqlServer"); 
      int val = 0; 
      using (DbCommand cmd = objDB.GetStoredProcCommand("InsertResoursce")) 
      { 
       // OutParameter 
       objDB.AddOutParameter(cmd,"@OutResoursceID",DbType.Int32,int.MaxValue); 

       // iNParameter 
       objDB.AddInParameter(cmd, "@ModuleId", DbType.Int32, r.ModuleId); 
       objDB.AddInParameter(cmd, "@Summary", DbType.StringFixedLength, r.Summary); 
       objDB.AddInParameter(cmd, "@PageId", DbType.StringFixedLength, r.PageID); 
       objDB.AddInParameter(cmd, "@TypeId", DbType.Int32, r.TypeID); 
       objDB.AddInParameter(cmd, "@UserID", DbType.Guid, r.UserID); 
       objDB.AddInParameter(cmd, "@Enabled", DbType.Boolean, r.Enabled); 
       objDB.AddInParameter(cmd, "@SafetyAlert", DbType.Boolean, r.SafetyAlert); 
       objDB.AddInParameter(cmd, "@SaftyAlertText", DbType.StringFixedLength, r.SafetyAlertText); 


       try 
       { 
        val = objDB.ExecuteNonQuery(cmd); 
        if (val == 1) 
        { 
         return Convert.ToInt32(objDB.GetParameterValue(cmd, "@OutResoursceID")); 
        } 
        else 
        { 
         return -1; 
        } 
       } 
       catch (Exception ex) 
       { 


        throw ex; 
       } 

      } 

System.ArgumentException został złapany hresult = -2147024809
Message = format ciąg inicjalizacji robi nie spełnia specyfikacji od począwszy od indeksu 0. Source = System.Da TA StackTrace: w System.Data.Common.DbConnectionOptions.GetKeyValuePair (ciąg connectionString, Int32 currentPosition bufor StringBuilder, logiczne useOdbcRules, String & keyname, String & keyvalue) w System.Data.Common.DbConnectionOptions.ParseInternal (HashTable parsetable, String connectionString, logiczna buildChain, HashTable synonimy logiczna firstKey) w System.Data.Common.DbConnectionOptions..ctor (ciąg connectionString, HashTable synonimy logiczna useOdbcRules) w System.Data.SqlClient.SqlConnectionString..ctor (String connectionString) w System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions (String ConnectionString, DbConnectionOptions poprzedni) na System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup (DbConnectionPoolKey kluczowych, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions & userConnectionOptions) na System.Data.SqlClient.SqlConnection.ConnectionString_Set (DbConnectionPoolKey klucz) w Systemie. Data.SqlClient.SqlConnection.set_ConnectionString (wartość ciągu) at Microsoft.Practices.EnterpriseLibrary.Data.Database.CreateConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetNewOpenConnection() at Microsoft.Practices.EnterpriseLibrary.Data .Database.GetWrappedConnection() w Microsoft.Practices.EnterpriseLibrary.Data.Database.GetOpenConnection() w Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery (DbCommand polecenia) w Christoc.Modules.ResourceModule.App_Code.BOL.Resoursce.Insert (Resoursce r) w c: \ inetpub \ wwwroot \ Ideapark \ DesktopModules \ ResourceModule \ App_Code \ BOL \ Resoursce.cs: linia 54 InnerException:

Odpowiedz

9

to zazwyczaj oznacza, że ​​ciąg połączenia nie jest dobry. Jeśli spojrzysz na ślad stosu, zauważysz, że to się nie udaje, gdy próbujesz zinterpretować ciąg połączenia.

Sprawdź swój ciąg połączenia, aby upewnić się, że jest poprawne - lub pisać tutaj o pomoc (ale bez żadnych poufnych informacji, takich jak hasła;))

UPDATE

Według SqlDatabase documentation SqlDatabase klasa przyjmuje ciąg połączenia, a nie klucz do konfiguracji ciągu połączenia.

Więc

new SqlDatabase("SiteSqlServer"); 

Powinny być

var connection = ConfigurationManager.ConnectionStrings["SiteSqlServer"]; 

Database objDB = new SqlDatabase(connection.ConnectionString); 

(I pominięto żadnego kodu obronną tutaj zwięzłość)