Visual Studio 中数据访问的疑难解答
更新:2007 年 11 月
本主题列出在 Visual Studio 中使用数据访问时遇到的一些常见问题。
在运行时不能访问可在设计时访问的数据库
这很可能是由于在运行时传递的用户名和密码被拒绝访问数据库。解决办法取决于正用于数据库的身份验证和授权方法以及连接字符串。
导致此问题的可能原因是:
- 完成 “添加/修改连接”对话框(通用) 后,选择“使用特定用户名和密码”选项而不选择“允许保存密码”选项。在这种情况下,当试图在设计时连接到数据源时,会提示您输入用户名和密码。对于运行时连接,您需要将功能合并到应用程序中以便将正确的用户名和密码传递到数据源。
要检查的内容:
验证您的应用程序所使用的用户名和密码是否具有访问数据源的正确权限。
验证用户在数据库中是否具有正确的权限设置。
验证运行应用程序的计算机与数据源之间是否存在网络连接。
在执行 SQL 命令时返回错误的或丢失的输出参数
这很可能是由于参数的 Direction 属性的设置不正确。参数的 Direction 属性设置为在 ParameterDirection 枚举中定义的值。
验证参数的 Direction 属性是否设置为可接收数据的值(对于输出参数为 Output)。
验证参数的数据类型是否与预期的返回值的数据类型相同。
说明: 输出参数在数据流的末尾返回,因此,如果使用的是 DataReader 对象(如 SqlDataReader),则必须关闭它或读到数据的末尾才能看到输出参数。
如想查看有关不返回的输出参数的更多信息以及代码示例,请在 Microsoft 产品支持服务网站(https://support.microsoft.com/default.aspx?ln=zh-cn) 上搜索 Q308051。
发生“.NET 数据 SQL 提供程序 (System.Data.SqlClient) 需要 Microsoft 数据访问组件 (MDAC) 2.6 版或更高版本”错误
Microsoft Windows 软件开发工具包 (SDK) 和 .NET Framework 可再发行组件包不包括 MDAC 安装。所有使用数据访问功能的 .NET Framework 应用程序都需要 MDAC 2.6 或更高版本(建议使用 MDAC 2.8 SP1)。最新版本的 MDAC 可从 Microsoft 网站 (https://www.microsoft.com/china) 下载。
因为 Visual Studio 在默认情况下安装 MDAC,所以当部署到未安装 Visual Studio 的计算机上时,很可能发生此错误。
当您部署应用程序时,可以让安装程序检查要部署到的计算机上的 MDAC 的版本。有关更多信息,请参见如何:添加 Microsoft 数据访问组件的启动条件。
在试图提交或回滚事务时发生意外异常
当数据源上的错误导致立即回滚事务时,可能会在应用程序中引发下列某个错误:
“COMMIT TRANSACTION 请求没有相应的 BEGIN TRANSACTION”
“ROLLBACK TRANSACTION 请求没有相应的 BEGIN TRANSACTION”
尽管该行为是设计使然,但最好始终从 Try...Catch 语句中调用访问外部数据源的方法(如 Commit 和 Rollback 方法)。有关更多信息,请参见如何:使用 Try/Catch 块捕捉异常 (Visual Basic) 或 try-catch(C# 参考)。
在试图从数据集中移除表时发生 InvalidOperationException
当数据集被绑定到 XmlDataDocument 时,调用 Clear 方法将引发如下异常:
System.InvalidOperationException:当 DataSet 被映射到已加载的 XML 文档后,无法从 DataSet 中添加或移除表。
从绑定到 XmlDataDocument 对象的数据集中清除数据需要导航表并移除单个 DataRow 对象。有关从数据表移除数据行的更多信息,请参见 如何:删除数据表中的行 和 DataRowCollection.RemoveAt 方法。
从“数据源”窗口拖动某些项时“标题标签”不正确
从“数据源”窗口拖动某些项时,将根据默认的正则表达式修改列名。如果列名包含后跟大写字符的小写字符,则将添加一个空格以拆分这两个词。另外,列名中的所有下划线均替换为空格。有关控制此行为的更多信息,请参见 如何:自定义 Visual Studio 创建数据绑定控件的标题的方式。
获取和显示数据的速度较慢
如果项目使用 BindingSource 组件,则尝试将 RaiseListChangedEvents 设置为 False。这会禁止 ListChanged 事件在列表中显示,并可以提高大型数据集上的性能。
在 Windows 2000 上安装应用程序后,应用程序失败并显示需要 MDAC 2.8 的警告
任何引用 System.Data 命名空间的应用程序都需要 Microsoft 数据访问组件 (MDAC) 2.8 版或更高版本。大多数情况下,该文件已随操作系统一起安装。在运行 Windows 2000 Service Pack 3 和更早版本的计算机上,可能需要与应用程序一起安装该组件。若要达到此目的,请将该组件添加到引导程序包中,并在安装期间从 Microsoft 下载该文件。有关更多信息,请参见部署系统必备 (Visual Studio)。
执行插入或更新操作时,数据库生成的值为 LINQ to SQL 类返回 NULL
LINQ to SQL 会自动为标识(自动递增)列、rowguidcol(数据库生成的 GUID)列和时间戳列处理数据库生成的值。在其他列类型中,数据库生成的值将意外导致 Null 值。若要返回数据库生成的值,应手动将 IsDbGenerated 设置为 true 并将 AutoSync 设置为下列值之一:Always、OnInsert 或 OnUpdate。