C# ServerVersion = “Conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常

本文分享了在使用C#连接SQL Server过程中遇到的一个常见异常问题及解决办法。作者因误用MySQL数据库连接字符串格式而导致异常,通过修正连接字符串中的关键字解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天复习下C#连接SQL SERVER 数据库的时候遇到了这个异常。
异常不是在try catch 中抛出来的。是在创建SqlConnection对象的时候对象中带出来的异常。见下图:

经过仔细检查,发现数据库连接字符串写错了。因为懒惰直接copy某MySql的数据库连接字符串。
错误的:
string connection = "data source=.;user id=user;password=123";
正确的:
string connection = "server=.;uid=user;pwd=123;";




你需要做以下两个修改来将代码改为 Java 8 版本: 1. 在 `String listenSql` 中将 `\` 替换为 `\\`,因为在 Java 字符串中,`\` 是一个特殊字符需要转义。 2. 在创建连接时,需要使用 Java 8 版本的 JDBC 驱动程序。你可以从 Microsoft 下载中心下载适用于 Java 8 的 Microsoft JDBC 驱动程序。 修改后的代码如下所示: ``` import java.sql.*; public class TableMonitor { public static void main(String[] args) { try { // 加载数据库驱动程序 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 连接数据库 Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=GD2030", "sa", "root"); // 创建扩展事件会话 Statement stmt = conn.createStatement(); String createSessionSql = "CREATE EVENT SESSION MyTableChanges ON SERVER ADD EVENT sqlserver.sp_statement_completed (WHERE object_name = 'Client')"; stmt.execute(createSessionSql); // 启动扩展事件会话 String startSessionSql = "ALTER EVENT SESSION MyTableChanges ON SERVER STATE = START"; stmt.execute(startSessionSql); // 监听扩展事件会话 String listenSql = "SELECT * FROM sys.fn_xe_file_target_read_file('C:\\MyTableChanges.xel', null, null, null)"; PreparedStatement pstmt = conn.prepareStatement(listenSql); ResultSet rs = pstmt.executeQuery(); // 处理扩展事件 while (rs.next()) { String event = rs.getString(1); System.out.println(event); } // 关闭连接 rs.close(); pstmt.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 这样修改后,你就可以在 Java 8 环境中运行这个程序了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值