dim ds as sqldatareader=mycommand.executereader()
改为
dim adapter as new SqlDataAdapter
adapter.selectcommand = mycommand
adapter.connection = myconnection
dim ds as new DataSet
adapter.fill(ds,"book")
其他就一样了
错误的原因是这样的:
datareader只是一个指针,你定义了它,却没有使用它,它当然没有任何东西了。

解决方案 »

  1.   

    有一个更简单的办法:
    把你的这两行:
    dim ds as sqldatareader=mycommand.executereader()
    mydatagrid.datasource=ds
    改成:
    mydatagrid.datasource=mycommand.executereader()
    其实这样就可以把数据源设为mycommand读出的数据了,然后绑定。
    习惯问题:
    as 后面通常是类型名,你的ds是一个datareader对象,也就是一个实例,但是你定义之后,ds没有任何对数据库的操作,所以其值是空值。
      

  2.   

    myconnection=new sqlconnection("server=ServerIp;uid=sa;pwd=1234;database=sell")
      

  3.   

    myconnection=new sqlconnection("server=cdma3\shop;uid=sa;pwd=1234;database=sell")==============>myconnection=new sqlconnection("data source=cdma3\shop;user id=sa;password=1234;initial catalog=sell")www.connectionstrings.com
      

  4.   

    问题是出在你的数据库连接字符串上面。如果写成server=cdma3\shop,而\在C#是用来表示转义的,所以你需要用两个\\来代替,即server=cdma3\\shop,或者在引号前加上@,表示为原义。
    如下:
    myconnection=new sqlconnection("server=cdma3\\shop;uid=sa;pwd=1234;database=sell")

    myconnection=new sqlconnection(@"server=cdma3\shop;uid=sa;pwd=1234;database=sell")
      

  5.   

    没有留意到你的代码是VB.net的。
    DataReader是一个持续连接的只读流,如果你需要绑定,直接用如下方式:
    mydatagrid.datasource=mycommand.executereader()
      

  6.   

    楼上的没有看见他用的Visual Basic吗?不是C#啊!
      

  7.   

    myconnection=new sqlconnection("server=ServerIp;uid=sa;pwd=1234;database=sell")
      

  8.   

    SQL Server连接中的三个最常见错误:
    一."SQL Server 不存在或访问被拒绝"
    这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.
    一般说来,有以下几种可能性:
    1、SQL Server名称或IP地址拼写有误
    2、服务器端网络配置有误
    3、客户端网络配置有误
    要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.
    ============= 首先,检查网络物理连接 =============
    ping <服务器IP地址/服务器名称>
    如果 ping <服务器IP地址> 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡、HUB、路由器等.
    还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server.防火墙软件可能会屏蔽对 ping、telnet 等的响应
    因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.
    如果ping <服务器IP地址> 成功而,ping <服务器名称> 失败
    则说明名字解析有问题,这时候要检查 DNS 服务是否正常.
    有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,
    具体的方法是:
    1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc).
    添加一条IP地址与服务器名称的对应记录,如:
    172.168.10.24 myserver
    2.或在 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明.
    ============= 其次,使用 telnet 命令检查SQL Server服务器工作状态 =============
    telnet <服务器IP地址> 1433
    如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接
    如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动 SQL Server 服务,
    也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听.
    =============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等 =============
    可以利用 SQL Server 自带的服务器网络使用工具来进行检查.
    点击:程序 -- Microsoft SQL Server -- 服务器网络使用工具
    打开该工具后,在"常规"中可以看到服务器启用了哪些协议.
    一般而言,我们启用命名管道以及 TCP/IP 协议.
    点中 TCP/IP 协议,选择"属性",我们可以来检查 SQK Server 服务默认端口的设置
    一般而言,我们使用 SQL Server 默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.
    ============= 接下来我们要到客户端检查客户端的网络配置 =============
    我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,
    所不同的是这次是在客户端来运行这个工具.
    点击:程序 -- Microsoft SQL Server -- 客户端网络使用工具
    打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议.
    一般而言,我们同样需要启用命名管道以及 TCP/IP 协议.
    点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.
    单击"别名"选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,
    连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.
    通过以上几个方面的检查,基本上可以排除第一种错误.
    二.当用户尝试在查询分析器里面使用sa来连接SQL Server,或者在企业管理器里面使用sa来新建一个SQL Server注册时,经常会遇到如图 2 所示的错误信息.该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示:
      1、 在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server
      2、 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性"选项卡
      3、 在"身份验证"下,选择"SQL Server和 Windows ".
      4、 重新启动SQL Server服务.
      在以上解决方法中,如果在第 1 步中使用"使用 Windows 身份验证"连接 SQL Server 失败,那么我们将遇到一个两难的境地:首先,服务器只允许了 Windows 的身份验证其次,即使使用了 Windows 身份验证仍然无法连接上服务器.这种情形被形象地称之为"自己把自己锁在了门外",因为无论用何种方式,用户均无法使用进行连接.实际上,我们可以通过修改一个注册表键值来将身份验证方式改为 SQL Server 和 Windows 混合验证,步骤如下所示:
      1、点击"开始"-"运行",输入regedit,回车进入注册表编辑器
      2、依次展开注册表项,浏览到以下注册表键:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
      3、在屏幕右方找到名称"LoginMode",双击编辑双字节值
      4、将原值从1改为2,点击"确定"
      5、关闭注册表编辑器
      6、重新启动SQL Server服务.
      此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server.这是因为在 SQL Server 中有两个缺省的登录帐户:BUILTIN\Administrators 以及 <机器名>\Administrator 被删除.要恢复这两个帐户,可以使用以下的方法:
      1、打开企业管理器,展开服务器组,然后展开服务器
      2、展开"安全性",右击"登录",然后单击"新建登录"
      3、在"名称"框中,输入 BUILTIN\Administrators
      4、在"服务器角色"选项卡中,选择"System Administrators" 
      5、点击"确定"退出
      6、使用同样方法添加 <机器名>\Administrator 登录.
      以下注册表键
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
      的值决定了SQL Server将采取何种身份验证模式.该值为1,表示使用Windows 身份验证模式该值为2,表示使用混合模式(Windows 身份验证和 SQL Server 身份验证).
      看完如何解决前两个错误的方法之后,让我们来看一下如图 3 所示的第三个错误.
      如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错.这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.
      要解决这样的错误,可以修改客户端的连接超时设置.默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因).具体步骤为:
      1、在企业管理器中,选择菜单上的"工具",再选择"选项"
      2、在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡
      3、在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 20.
      查询分析器中也可以在同样位置进行设置.
     简单一点就是:
    /**********************************/
    1、先保证ping通
    2、在dos下写入telnet ip 1433不会报错
    3、用ip连如企业管理器:
    企业管理器---右键SQlserver组---新建sqlserver注册---下一步---写入远程实例名(IP,机器名)---下一步---选Sqlserver登陆---下一步---写入登陆名与密码(sa,pass)---下一步---下一步---完成
    4、如果还不行:
    sqlserver服务器---开始菜单---SQLserver---服务器网络实用工具---启用 WinSock代理---代理地址:(sqlserver服务器IP)---代理端口---1433---OK了
    5、如果还不行:
    sqlserver客户端---开始菜单---SQLserver---客户端网络实用工具---别名---添加---写入别名如"大力"---"网络库"选tcp/ip---服务器名称写入远程ip或实例名如果连接没问题,那就是你代码中的问题了
      

  9.   

    server=cdma3\shop
    改成\\server=cdma3\shop试试
      

  10.   

    我按大家的方法都试过了,可是还是不行
    我觉得当我执行mycommand.connection.open()的时候,已经开始对数据库开始访问了
    可是我用SQL事件探查器,根本就看不到有任何信息SQL server没有问题,因为我还装着一个论坛就用这个SQL server服务器很正常这是完整的原码,请大家看看错误在哪里
    <%@ page language="vb"&>
    <%@ import namespace="system.data" %>
    <%@ import namespace="system.data.sqlclient" %><html>
    <head>
    </head>
    <body><script language="VB" runat="server">
    sub page_load(source as object,e as eventargs)dim myconnection as sqlconnection
    dim mycommand as sqlcommand
    dim mysql as string
    myconnection=new sqlconnection("server=cdma3\shop;uid=sa;pwd=1234;database=sell")
    mycommand=new sqlcommand("select * from book",myconnection)
    mycommand.connection.open()mydatagrid.datasource=mycommand.executereader()
    mycommand.connection.close()end sub</script><body><h3><font face="verdana">卖出去的书</font></h3><asp:datagrid id="mydatagrid" runat="server"
         width="700"
         backcolor="#ffffff"
         bordercolor="black"
         showfooter="false"
         cellpadding=3
         cellspacing="0"
         font.name="verdana"
         font.size="8pt"
         headerstyle.backcolor="#cfcfcf"
         enableviewstate="false"
    />
    </body>
    </html>
      

  11.   

    你首先用一test.udl测试能不能连上sqlserver中的数据库,然后用记事本打开test.udl,将其中的链接字符串复制下来作为你程序中的链接字符串!
    还有
    mydatagrid.datasource=mycommand.executereader()
    下面应该还有一句数据绑定代码吧!
    mydatagrid.DataBind()
      

  12.   

    try
    {
    SqlConnection myconn=new SqlConnection(strcon);
    string strsquer="select car_id as 车牌,car_type as 车型, start_place as 始发站,end_place as 终点站,start_time as 发车时间, time1 as [所用时间(小时)],distance as [距离(米)], price as 票价,seats as 座位 from carmain ";
    SqlCommand mycom=new SqlCommand(strsquer,myconn);
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand=mycom;
    myconn.Open();
    DataSet ds = new DataSet ( );
    da.Fill(ds,"carmain");
    dataGrid1.DataSource =ds;
    dataGrid1.SetDataBinding(ds,"carmain");
    myconn.Close ( ) ;
    da.Dispose ( ) ; 
    }
    catch(Exception ee)
    {
    MessageBox.Show("出错了"+ee.ToString());
    }
    这些都是正确,这是我的代码,你对照一下吧!
      

  13.   

    test.udl是什么东西
    我没有用过呀