none
类型初始值项引发异常 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Castms.Common
    {
        public class Define
        {
            public static readonly string ConnectionString = "Data Source=.\\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True";
    
            static Define()
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration("Common.dll");
                string strConnctionString = config.ConnectionStrings.ConnectionStrings["CASTMSConnectionString"].ConnectionString;
    
                if (strConnctionString != "")
                {
                    ConnectionString = strConnctionString;
                }
            }
        }
    }

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
      </configSections>
      <connectionStrings>
        <add name="CASTMSConnectionString" connectionString="Data Source=.\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True"
          providerName="System.Data.SqlClient" />
        <add name="Castms.Common.Properties.Settings.CASTMSConnectionString"
          connectionString="Data Source=NONE-0002;Initial Catalog=CASTMS;Integrated Security=True"
          providerName="System.Data.SqlClient" />
        <add name="Castms.Common.Properties.Settings.CASTMSConnectionString1"
          connectionString="Data Source=(local)\SqlExpress;Initial Catalog=CASTMS;Integrated Security=True"
          providerName="System.Data.SqlClient" />
      </connectionStrings>
    </configuration>

    请大家帮我看看是哪里出现问题了,急死了。一个小问题都能憋死人啊
    秦臻
    2011年9月22日 1:20

答案

  • Hi 秦臻,


    请把

       Configuration config = ConfigurationManager.OpenExeConfiguration("Common.dll");

                string strConnctionString = config.ConnectionStrings.ConnectionStrings["CASTMSConnectionString"].ConnectionString;

    替换为

    string connectionSting = ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString;

     

    既然你已经在app.config 里面设置了链接数据库的字符串,那么就不需要在C#代码中,加上一个

    public static readonly string ConnectionString = "Data Source=.\\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True";

    这两个地方都是用于数据库连接,功能相同,取其一即可。

     

    关于 使用app.config 的好处,请参考以下链接:
    http://bbs.gimoo.net/thread/51140-1.html

     

    祝,一切顺利!

    ============================================

    This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information is found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月27日 10:13
    版主

全部回复

  • 问题出在这里。你既然上面已经定义了一个 
    static readonly的类型
     public static readonly string ConnectionString

    下面就不要给他赋值了
    ConnectionString = strConnctionString;

    要不修改类型,要不直接把
    if (strConnctionString != "") { ConnectionString = strConnctionString; }
    这句去掉,建议先学学基础知识

    2011年9月22日 3:39
  • 同意diorlv的说法。你可以这样修改

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Castms.Common
    {
        public class Define
        {
    		public static string ConnectionString 
    		{
    			get
    			{
    				return connection_string;
    			}
    			private set
    			{
    				//下面方法看.net版本,可以换成带有white检查的
    				if(string.IsNullOrEmpty(value)) return;//skip error input
    				connection_string = value;
    			}
    		}
    		
    		private string connection_string = "Data Source=.\\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True";
    
            static Define()
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration("Common.dll");
                string strConnctionString = config.ConnectionStrings.ConnectionStrings["CASTMSConnectionString"].ConnectionString;
    
                if (strConnctionString != "")
                {
                    ConnectionString = strConnctionString;
                }
            }
        }
    }
    


     


    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年9月22日 8:09
    版主
  • Hi 秦臻,

    欢迎来到MSDN论坛!

    您的问题处理的怎么样了?

    如果您还有任何问题,不妨告诉我们。

    祝您,一切顺利!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月23日 6:22
    版主
  • 大哥,connection_string是什么?我复制进去,发现未定义。您能说的更具体一些吗?
    秦臻
    2011年9月23日 7:13
  • Hi 秦臻,

    注意大小写。应当是 ConnectionString, 即下面这一句话中定义的静态只读字段:
     

           public static readonly string ConnectionString = "Data Source=.\\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True";
    

     

    但是,您提供的信息中,在下面部分代码中,却尝试对ConnectionString 进行修改:

                if (strConnctionString != "")
                {
                    ConnectionString = strConnctionString;
                }
    
    请参考以下链接,以获取更多关于 readonly 的信息:
    http://msdn.microsoft.com/zh-cn/library/acdd6hb7.aspx

    祝您,周末愉快!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.





    2011年9月23日 7:45
    版主
  • 还有问题,如果我把static Define()
    直接注释掉,就可以运行无误。所以我猜测是App。config问题。我把我的App。config贴出来,大家帮我看看,问题在什么地方。还有如果我直接在App.config文件中修改,这种修改会改变运行结果吗?就是这里有没有绑定什么东西

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="CASTMSConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=CASTMS;Integrated Security=True"
          providerName="System.Data.SqlClient" />
          </connectionStrings>
    </configuration>

     


    秦臻
    2011年9月23日 8:17
  • Hi 秦臻,

    之所以您把 static Define() 那一大段代码注释掉以后没有出现问题,那是因为,您恰恰是在static Define() 那一段代码中,尝试对静态只读字段ConnectionString进行的修改。

    祝,今天愉快!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.



    2011年9月23日 8:46
    版主
  • 很感激大家的回答,谢谢!其实尝试对静态只读字段ConnectionString进行的修改那段话基本用不到。因为我把 if (strConnctionString != "")
                {
                    ConnectionString = strConnctionString;
                }
    这段话注释掉以后,出项相同的错误。而当我把

    string strConnctionString = config.ConnectionStrings.ConnectionStrings["CASTMSConnectionString"].ConnectionString;

    这句话注释掉以后,就不会出现问题了,所以我感觉可能还是这句话除了问题。


    秦臻
    2011年9月23日 10:18
  • Hi,

    既然你已经感觉问题在哪一行了,为什么不自己单步调试一下,看看 strConnectionString 到底是什么值呢?


    2011年9月25日 13:48
  • 我调试过了,到了那一步就直接跳到下一步,且报错,根本就看不到strConnctionString的值。那句话好像是与下面的app.xml有关,我贴出来,谁还能帮帮我吗?其实我也不知道这句话到底有什么作用,去掉好像也能正常运行。加上这句话到底有什么好处呢? <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="CASTMSConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=CASTMS;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
    秦臻
    2011年9月26日 6:43
  • Hi 秦臻,


    请把

       Configuration config = ConfigurationManager.OpenExeConfiguration("Common.dll");

                string strConnctionString = config.ConnectionStrings.ConnectionStrings["CASTMSConnectionString"].ConnectionString;

    替换为

    string connectionSting = ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString;

     

    既然你已经在app.config 里面设置了链接数据库的字符串,那么就不需要在C#代码中,加上一个

    public static readonly string ConnectionString = "Data Source=.\\SQLExpress;Initial Catalog=CASTMS;Integrated Security=True";

    这两个地方都是用于数据库连接,功能相同,取其一即可。

     

    关于 使用app.config 的好处,请参考以下链接:
    http://bbs.gimoo.net/thread/51140-1.html

     

    祝,一切顺利!

    ============================================

    This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information is found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月27日 10:13
    版主
  • 您最主要的答复是

    这两个地方都是用于数据库连接,功能相同,取其一即可。

    因为我按照您的意思修改

    public class Define
        {
            
    public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["CASTMSConnectionString"].ConnectionString;
           
    }结果运行中出现:


    秦臻
    2011年9月28日 5:26
  • Hi 秦臻,
    我在VisualStudio2010 中测试了你所提供的代码,并没有发现任何问题。请看下图:
     
    以下是App.config中的代码:
             <?xml version="1.0"?>
             <configuration>
             <connectionStrings>
                  <add name="ConnectionString1" connectionString=" Data Source=(local);Initial Catalog=Test;
                     Integrated Security =True;" providerName="System.Data.SqlClient"/>
             </connectionStrings>
             </configuration>
    
    或者,请您把Define类中的代码换成        
            public class Define
            {
                // 请根据您的实际情况修改此连接字符串
                public static readonly string ConnectionString =
                    "Data Source=(local);Initial Catalog=Test;Integrated Security =True;";
            }
    
    如果这样仍然不能得到预期结果,那么,很可能是由于数据库连接字符串设置错误导致的。
    祝,一切顺利!

    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月28日 6:24
    版主
  • 另外,请问您的 ProductDataContext 类内部代码是如何实现的?

    方便的话,您能为我们提供此类的内部代码么?


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月28日 6:28
    版主
  • public ProductDataContext() : 
    				base(global::Castms.Common.Properties.Settings.Default.CASTMSConnectionString1, mappingSource)
    		{
    			OnCreated();
    		}
    		
    		public ProductDataContext(string connection) : 
    				base(connection, mappingSource)
    		{
    			OnCreated();
    		}
    		
    		public ProductDataContext(System.Data.IDbConnection connection) : 
    				base(connection, mappingSource)
    		{
    			OnCreated();
    		}
    		
    		public ProductDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
    				base(connection, mappingSource)
    		{
    			OnCreated();
    		}
    		
    		public ProductDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
    				base(connection, mappingSource)
    		{
    			OnCreated();
    		}
    谢谢您一直为我解答问题,非常之感谢。另外你提供的方法是可行的,不用App.config是可以连接数据库的。上面是我转到定义后得到代码


    秦臻
    2011年9月28日 13:51
  • Hi 秦臻,

    根据您提供的ProductDataContext() 的几个构造函数看来,ProductDataContext类继承了某个类。
    请您尝试下,不使用
    ProductDataContext类时,是否可以直接利用App.config来进行数据库链接。请参考我上一个帖子中截图中的代码。

    如果仍然出现问题,请您查看下您的App.config是否设置正确;如果没有出现问题,请您仔细研究下ProductDataContext类及其基类,看是否有什么不合适的地方。

    如果方便的话,您可以把整个项目发到我的邮箱,以便我能重现问题。
    v-yoyj at microsoft dot com

    谢谢!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.



    2011年9月29日 8:02
    版主