黑马程序员技术交流社区

标题: ADO.NET连接SQLServer遇到的问题 [打印本页]

作者: 胡文强    时间: 2012-1-6 17:26
标题: ADO.NET连接SQLServer遇到的问题
本帖最后由 胡文强 于 2012-1-10 01:18 编辑

static void Main(string[] args)
        {
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
                || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            SqlConnection conn = new SqlConnection(@"Data Source=20111226-1125;AttachDbFilename=|DataDirectory|\CallCenter.mdf;Integrated Security=True;User Instance=True");
            conn.Open();
            Console.WriteLine("打开数据库连接成功");
            Console.ReadKey();
        }

调试运行弹出警告“ 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭。
数据库打不开,请问我该怎么做?

Windows xp sp3
Microsoft Visual Studio 2010
Microsoft SQL 2008 Server Management (开发版)
服务器名:20111226-1125                                               

作者: 胡文强    时间: 2012-1-6 22:15
经过到处找资料和自己的不断调试,我将问题自己解决了。
由于装的sql不是免费版的所以将“Data Source=20111226-1125;AttachDbFilename=|DataDirectory|\CallCenter.mdf;Integrated Security=True;User Instance=True”中的”user instance=true“删去。

接下来做插入语句的时候,第一次运行能成功,再次运行就提示出错。
  1. string dataDir = AppDomain.CurrentDomain.BaseDirectory;
  2.             if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
  3.             {
  4.                 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
  5.                 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
  6.             }
  7.             using (SqlConnection conn = new SqlConnection(@"Data Source=20111226-1125;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;"))
  8.             {
  9.                 conn.Open();
  10.                 using (SqlCommand cmd = conn.CreateCommand())
  11.                 {
  12.                     cmd.CommandText = "insert into Mytable(name) values('god')";
  13.                     cmd.ExecuteNonQuery();
  14.                     Console.WriteLine("插入成功");
  15.                 }
  16.             }
  17.             Console.WriteLine("打开数据库连接成功");
  18.             Console.ReadKey();
复制代码
到处找原因,最后发现每运行一次后sqlserver management会打开调用的Database1.mdf数据库,要在vs中访问Database1.mdf就会提示“有程序占用不能访问。”,暂时的解决方法是在sqlserver management中把打开的Database1.mdf分离,就不会有问题了。

但这么做很麻烦,每次都要去分离一下,请问哪位有什么高招啊,请指点一下小菜鸟。
作者: 杨磊    时间: 2012-2-2 00:28
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭。

原因:
<connectionStrings>
    <add connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\Blog.mdf;Integrated Security=True;User Instance=True"
      providerName="System.Data.SqlClient" />
</connectionStrings>
中的红色部分User Instance=True;只有SQL Server Express版的支持

解决方法:
方法1:在连接属性的设置里边,点高级,将User Instance 设置为false,默认的true(我在数据库中没有找到相应的选项,使用的是第二种方法)
方法2:更改WEB.CONFIG中的连接字符串中的User Instance 为false即可。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2