C# 初始化字符串的格式不符合从索引 0 开始的规范

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16203376/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 00:22:10  来源:igfitidea点击:

Format of the initialization string does not conform to to specification starting at index 0

c#asp.netiis-7enterprise-library

提问by

I am using Microsoft Enterprise Lip I I have this method to Insert resource in the website I get this error down i don't think it is permission problem and really i don't know how to solve it.by the way I test the connectionStrings and it work fine

我正在使用 Microsoft Enterprise Lip II 有这种方法在网站中插入资源我得到这个错误我不认为这是权限问题,我真的不知道如何解决它。顺便说一下我测试 connectionStrings 和它工作正常

  <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 was caught HResult=-2147024809
Message=Format of the initialization string does not conform to specification starting at index 0. Source=System.Data StackTrace: at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) at Microsoft.Practices.EnterpriseLibrary.Data.Database.CreateConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetNewOpenConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetWrappedConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetOpenConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command) at Christoc.Modules.ResourceModule.App_Code.BOL.Resoursce.Insert(Resoursce r) in c:\inetpub\wwwroot\ideaPark\DesktopModules\ResourceModule\App_Code\BOL\Resoursce.cs:line 54 InnerException:

System.ArgumentException 被捕获 HResult=-2147024809
Message=初始化字符串的格式不符合从索引 0 开始的规范。Source=System.Data StackTrace: at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& 键值)在 System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable,String connectionString,Boolean buildChain,Hashtable 同义词,Boolean firstKey)在 System.Data.Common.DbConnectionOptions..ctor(String connectionString,Hashtable 同义词,Boolean useOdbcRules)在 System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString,DbConnectionOptions 前)在 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey 键,DbConnectionPoolGroupOptions poolOptions,DbConnectionOptions& userConnectionOptions)在 System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey 键值)在 System.Data.SqlClient.SqlConnection.set_ConnectionString( ) 在 Microsoft.Practices.EnterpriseLibrary.Data.Database.CreateConnection() 在 Microsoft.Practices.EnterpriseLibrary.Data.Database.GetNewOpenConnection() 在 Microsoft.Practices.EnterpriseLibrary.Data.Database.GetWrappedConnection() 在 Microsoft.Practices.EnterpriseLibrary。 Microsoft.Practices.EnterpriseLibrary.Data.Database 中的 Data.Database.GetOpenConnection()。ExecuteNonQuery(DbCommand 命令)在 Christoc.Modules.ResourceModule.App_Code.BOL.Resoursce.Insert(Resoursce r) in c:\inetpub\wwwroot\ideaPark\DesktopModules\ResourceModule\App_Code\BOL\Resoursce.cs:line 54

采纳答案by Fenton

This usually means your connection string isn't any good. If you look at the stack trace, you'll notice that this is failing when trying to interpret your connection string.

这通常意味着您的连接字符串没有任何好处。如果您查看堆栈跟踪,您会注意到在尝试解释连接字符串时这是失败的。

Check your connection string to make sure it is correct - or post it here for help (but without any sensitive information such as passwords ;) )

检查您的连接字符串以确保它正确 - 或将其张贴在此处寻求帮助(但没​​有任何敏感信息,例如密码;))

UPDATE

更新

According to the SqlDatabase documentationthe SqlDatabase class takes a connection string, not a key to the connection string configuration.

根据SqlDatabase 文档,SqlDatabase 类采用连接字符串,而不是连接字符串配置的键。

So

所以

new SqlDatabase("SiteSqlServer");

Should be

应该

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

Database objDB = new SqlDatabase(connection.ConnectionString);

(I have omitted any defensive code here for brevity)

(为简洁起见,我在这里省略了任何防御性代码)