C#2005连接数据库出错:"conn.ServerVersion"引发的“System.InvalidOperationException”类型的异常

月影飞翼 2008-05-19 10:18:23
开发环境1:WinXP SP3 + vs2005 + sql2000
开发环境2:Win2003Server RC2 + vs2005 + sql2005
出现同样问题:

数据库:testDB,
表:login,
表内容:---------------------------------
| ID | Name | Pwd |
| 1 | admin | admin888 |
代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string source = "server=127.0.0.1;" + "uid=sa;" + "pwd=;" + ";initial catalog=testDB";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM login WHERE Name = '" + "admin" + "' and Pwd = '" + "admin888" + "'", conn);
string t = cmd.ExecuteScalar().ToString();
Console.WriteLine(t);
if (t == 1)
Console.WriteLine("连接成功!");
else
Console.WriteLine("连接失败!");
conn.Close();
}
}
}
没有抛出异常,没有出错信息。
运行结果:
0
连接失败。
在这两行添加断点 SqlConnection conn = new SqlConnection(source);
conn.Open();
调试信息:
:"conn.ServerVersion"引发的“System.InvalidOperationException”类型的异常
base:无效连接,连接被关闭。
...全文
2697 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudi626 2008-05-19
  • 打赏
  • 举报
回复
MARK!
这个就是细节的地方了!
yuekai2008 2008-05-19
  • 打赏
  • 举报
回复
我在这里想说两个问题:一是在用到数据库是,一般都习惯这两个引用要一起引用using System Data;
using System.Data.SqlClient;还有就是用sa作登录的话,密码一般不能为空,因为这常常会引起一起非技术性问题,你可以在2005那里修改一下sa的PWD。
二就是在在连接数据库方面,一般都是要配置APP文件,这样以后才可以易于修改而不用修改逻辑代码。监于你这个是小
程序,所以我认为你的这个数据库连接方面有问题。我认为代码如下:

private sataiv string strConnect = "data source=127.0.0.1;uid=sa;pwd=123456(这个可 改);database=testDB";
SqlConnection conn = new SqlConnection(strConnect);
SqlCommand objcommand=new Sqlcommand("",conn);

objCommand.commandText = new SqlCommand("SELECT COUNT(*) FROM login WHERE Name = '" + "admin" + "' and Pwd = '" + "admin888" + "'", conn);
。。。。。。。之后才是对数据进行操作的部分,我看你会,所以不多说了




月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Guyschaos 的回复:]
int t =(int)cmd.ExecuteScalar();
还有字符串的问题你看看对不对哦!呵呵
[/Quote]
的确是这样,谢谢,问题已解决
完慗的正确代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string source = "server=127.0.0.1;" + "uid=sa;" + "pwd=udbhwfnh;" + "initial catalog=testDB";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM login WHERE Name = '" + "admin'" + "and Pwd='" + "admin888'", conn);
//string t = cmd.ExecuteScalar().ToString();
int t = (int)cmd.ExecuteScalar();//
Console.WriteLine(t);
if (t == 1)
Console.WriteLine("连接成功!");
else
Console.WriteLine("连接失败!");
conn.Close();
}
}
}
贫僧又回来了 2008-05-19
  • 打赏
  • 举报
回复
int t =(int)cmd.ExecuteScalar();
还有字符串的问题你看看对不对哦!呵呵
贫僧又回来了 2008-05-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Guyschaos 的回复:]
int t=cmd.ExecuteNonQuery();//返回行数!
这个你改了吗?
[/Quote]
刚才没看你的SQL语句,这样改不行的,你返回的是数字,不是影响的行数!
int t = cmd.ExecuteScalar();
wuzy1229 2008-05-19
  • 打赏
  • 举报
回复
select count(*) from login where name = '"+ admin+"' and pwd ='"+admin888+"'"
上面少了个加号
wuzy1229 2008-05-19
  • 打赏
  • 举报
回复
如果上面还查不到 数据,你到 sqlsever 执行上面的 语句看有数据没,没的化就没的
月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
还是不行
t=-1
连接失败
为什么t的值是-1?
wuzy1229 2008-05-19
  • 打赏
  • 举报
回复
("SELECT COUNT(*) FROM login WHERE Name = '" + "admin" + "' and Pwd = '" + "admin888" + "'",
改为
select count(*) from login where name = '"+ admin"' and pwd ='"+admin888+"'"
wuzy1229 2008-05-19
  • 打赏
  • 举报
回复
string source = "server=127.0.0.1;" + "uid=sa;" + "pwd=;" + ";initial catalog=testDB";
有问题
改为
string source = "server=127.0.0.1;" + "uid=sa;" + "pwd=;" + "initial catalog=testDB";
月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
谢谢!问题已解决。
解决方法:int t=cmd.ExecuteNonQuery();//返回行数!
但是,为什么t的值是-1?
月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
WinXP SP3 + vs2005 + sql2000
连接字符串:
Data Source=127.0.0.1;Initial Catalog=testDB;User ID=sa;Password=;

Win2003Server RC2 + VS2005 + SQL2005
连接字符串:
Data Source=.;Initial Catalog=testDB;User ID=sa;Password=;
两种环境下使用VS的向导添加新数据源都可以连接成功,
贫僧又回来了 2008-05-19
  • 打赏
  • 举报
回复
可能和连接字符串有关系!
贫僧又回来了 2008-05-19
  • 打赏
  • 举报
回复
int t=cmd.ExecuteNonQuery();//返回行数!
这个你改了吗?

月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
Win2003Server RC2 + VS2005 + SQL2005环境下改为这样可以通过。
string source = "server=(local);" + "integrated security=SSPI" + ";initial catalog = testDB";
改成uid + pwd就不行了
月影飞翼 2008-05-19
  • 打赏
  • 举报
回复
错误 1 “System.Data.SqlClient.SqlConnection”并不包含“ExecuteNonQuery”的定义 G:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 18 26 ConsoleApplication1
贫僧又回来了 2008-05-19
  • 打赏
  • 举报
回复
int t=comm.ExecuteNonQuery();//返回行数!
if (t == 1)
Console.WriteLine("连接成功!");
else
Console.WriteLine("连接失败!");
conn.Close();

ericzhangbo1982111 2008-05-19
  • 打赏
  • 举报
回复
好像记得WinXP SP3 连接sqlserver2000需要安装补丁

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧