用户代码未处理 SqlException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户代码未处理 SqlException相关的知识,希望对你有一定的参考价值。

文件代码:
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
using System.Configuration;

namespace Web.DataAccess

public sealed class SqlHelper

//读取存放在web.config文件里的数据库连接字符串
static string ConnectionString = ConfigurationManager.ConnectionStrings

["SqlConnStr"].ToString();

//封装Command对象的ExecuteNonQuery方法,对数据库进行更新,删除和插入数据
public static void ExecuteNonQuery(string sql)

using (SqlConnection conn = new SqlConnection(ConnectionString))

SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();



public static DataSet ExecuteDataSet(string sql)

using (SqlConnection conn = new SqlConnection(ConnectionString))

SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;



public static object ExecuteScalar(string sql)

using (SqlConnection conn = new SqlConnection(ConnectionString))

conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
return cmd.ExecuteScalar();






调试时错误信息:
在与SQL Server建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是

否正确并且SQL Server已配置为允许远程连接。(provider:SQL 网络接口中,error:26-定位指定的服务器/实例时

出错)

其它说明:我使用的是XP系统,IIS 5.0 不过我并没有在IIS中调试,而是直接在VS2005中调试的。
我的电脑上SQL数据库软件可能没有装好,因为我装了一个SQL2008,但不能用。不知这个对调试有没有影响?

web.config文件代码如下:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
<appSettings>
<add key="dbPath" value="C:\qi_ye_wang_zhan/App_Data/Data.mdb"/>
</appSettings>
<connectionStrings>
<add name="ConnStr" connectionString="provider=microsoft.jet.oledb.4.0;data source=" />
<add name="SqlConnStr" connectionString="server=.\SQL2005;uid=sa;pwd=;database=PrettyWeb" />
</connectionStrings>
<system.web>

<compilation debug="true" />

<authentication mode="Windows" />

<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
</system.web>
</configuration>
根据落月prc网友的提议,我已将数据库连接字符串改过来了.还是不行.
错误提示指向了这一句代码,请大伙再帮忙分析一下.
sda.Fill(ds);

另外,如果哪位朋友手上有现成的ASP或ASPX网站,不知可以发给我用一下不?
我现在帮一位朋友做一个网站,数据库方面还不是很顺畅.
如果试用可以的话,我可以出点钱哦(手机充值最方便了).当然我会自己编辑网页内容,主要是想借用一下数据库及框架.

请大伙伸伸援手

这是因为你的SQL Sever服务的TCP协议没有打开。
具体的步骤很多:
查看SQL Server 网络配置信息。默认的情况下列表中的Named Pipes和TCP/IP的状态为Disable,即没有启用。右键点击这两项,在弹出菜单中选中Enable启用这两个协议。
在TCP/IP协议上双击鼠标,弹出对话框。修改对话框Protocol属性页中的“Listen All ”项设为“no”。IP Address属性页中,修改你要数据库服务监听的IP地址 的属性,修改Enabled属性为Yes,修改TCP Dynamic Ports属性为空,TCP Port项在默认安装下为空,现在修改为我们监听端口1433。
完成以上操作后需要重新启动数据库服务才能使修改生效。
可以在命令窗口输入如下命令“netstat - na”命令查看服务器监听的所有端口。
参考技术A 数据库连接字符串写错了!
server=.\SQL2005;uid=sa;pwd=;database=PrettyWeb
你的数据库的实例名叫SQL2005?
改成server=.;uid=sa;pwd=;database=PrettyWeb试试,一般都是用的默认实例名的。
现在你的问题是,SQL语句写错了。建议你把SQL语句和相应的代码发出来,这样大家都能帮助你的。
有啥不懂得也可以直接HI我。本回答被提问者采纳
参考技术B 数据库用户名或者密码错误,请修改两个地方:(1)Web.config连接字符串的用户名和密码,(2)App_Code文件夹下DB.CS文件的连接是否与web.config相关信息是否一致
例子:
Web.config
连接字符串
-----------------------------------------------------------------
<connectionStrings>
<add
name="ConnectionString"
connectionString="Data
Source=localhost;Initial
Catalog=data_abc;User
Id=sa;Password=sa;Connect
Timeout=180;Enlist=true;Pooling=true;Max
Pool
Size
=
500;Min
Pool
Size
=1;Connection
Lifetime=2000;packet
size=4096"
-----------------------------------------------------------
DB.CS
public
static
SqlConnection
getConnection()

return
new
SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

providerName="System.Data.SqlClient"
/>
</connectionStrings>
参考技术C 把SqlCommand
cmdItem
=
new
SqlCommand("select
*
from
vote
where
voteID="
+
voteID,
con);
换成cmd.CommandText="select
*
from
vote
where
voteID="+voteID;

conn.rollback() 上的错误未处理 SQLException...如何正确使用 commit()?

【中文标题】conn.rollback() 上的错误未处理 SQLException...如何正确使用 commit()?【英文标题】:Error Unhandled SQLException on conn.rollback()... How to correctly use commit()? 【发布时间】:2018-10-30 15:02:49 【问题描述】:

所以,我正在努力学习。我为slopinnes道歉。此代码进行事务处理,因此自动提交必须为 false,但它在 conn.rollback() 上引发未处理的 SQLException,我不明白为什么如果它已经在 catch(exception) 中...我应该将所有内容都包装在另一个上吗尝试捕捉?

try 
    conn.setAutoCommit(false);

    String sql="SELECT l.toy_id FROM LETTER l WHERE toy_id=?";
    PreparedStatement selectStatement = conn.prepareStatement(sql);

    String sqlD="DELETE FROM TOY WHERE toy_id=?";
    PreparedStatement deleteStatement = conn.prepareStatement(sqlD);

    String sqlU="INSERT INTO TOY (toy_id, toy_name, price,toy_type, manufacturer) VALUES (?,?,?,?,?)";
    PreparedStatement UpdateStatement = conn.prepareStatement(sqlU);

    // TODO Update or delete Toy for every row in file
    for (List<String> row : fileContents) //!!!!!!!no borrar!!!    
        int toy_id=getToyId(row);   

        //should another try go here??
        selectStatement.setInt(1, toy_id);
        ResultSet rs = selectStatement.executeQuery(sql);
        if (!rs.first()) //HERE WE DELETE
            deleteStatement.setInt(1, toy_id);
            deleteStatement.executeUpdate();
        else 
          while (rs.next()) //HERE WE UPDATE
                UpdateStatement.setInt(1, toy_id);
                UpdateStatement.executeUpdate(); 
           
               
        rs.close();     
    
    conn.commit();  

catch (SQLException e)
    System.out.println("ERRRROOOOOOORRRRR");
    conn.rollback();
   

【问题讨论】:

" 我应该把所有东西都包装在另一个 try-catch 上吗?" - 可能,是的。它给您带来问题的原因是该语句是在 try-catch 块的上下文之外执行的(是的,您在“catch”块内,但这不是一回事) 附带说明,为什么不使用数据库存储过程来执行选择、插入、更新和删除操作,并通过传递必要的参数从 Java 调用存储过程? 【参考方案1】:

第一次尝试应该引用连接(conn.setAutoCommit(false);...),内部尝试应该引用事务语句。见Transaction rollback on SQLException using new try-with-resources block

【讨论】:

【参考方案2】:

在您的 finaly 块中添加以下代码:

    try   
        if (connection != null)   
        connection.rollback();  
        connection.setAutoCommit(true);  
      
     catch (SQLException e)   
        LOG.error(e.getMessage(), e);  
      

注意:您可以再次将自动提交设置为true

【讨论】:

以上是关于用户代码未处理 SqlException的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse - 在 Android 应用程序上引发未处理的异常时中断用户代码

部署时,出现用户代码未处理 System.Security.Cryptography.CryptographicException 错误解决方法

对象引用未设置为对象的实例(NullreferenceException未被用户代码处理)

Visual Studio 2013 未引发用户未处理的异常

使用 react-router 处理 401 未授权代码

求大侠帮忙,好多次调试都在SqlConnection conn = new SqlConnection(connStr);出现用户代码未处理