当前位置:编程学习 > C#/ASP.NET >>

aspx无法连接到SQL

各位大虾,
最近本人在学习ASP.NET,遇到一些问题。
其中aspx无法连接到SQL数据库,网页提示如下错误信息,帮忙看看怎么实现连接呢?

用户 'sa' 登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。
源错误: 
行 331:  //判断连接的状态。如果是关闭状态,则打开
行 332:  if (conn.State != ConnectionState.Open)
行 333:  conn.Open();
行 334:  //cmd属性赋值
行 335:  cmd.Connection = conn;
源文件: d:\eBookShop\App_Code\数据访问\SqlAccess.cs    行: 333  aspx sql 连接 --------------------编程问答-------------------- web.config的配置如下:

<?xml version="1.0"?>
<configuration>
<system.web>
       <compilation defaultLanguage="c#" debug="true">
      <compilers>
      <compiler language="c#" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" extension=".cs" compilerOptions="/d:DEBUG;TRACE"/></compilers></compilation>
<!--  自定义错误信息
          设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。 
          为每个要处理的错误添加 <error> 标记。

          "On" 始终显示自定义(友好的)信息。
          "Off" 始终显示详细的 ASP.NET 错误信息。
          "RemoteOnly" 只对不在本地 Web 服务器上运行的
           用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便 
           不向远程客户端显示应用程序的详细信息。
    -->
<customErrors mode="RemoteOnly"/>
<!--  身份验证 
          此节设置应用程序的身份验证策略。可能的模式是 "Windows"、 
          "Forms"、 "Passport" 和 "None"

          "None" 不执行身份验证。 
          "Windows" IIS 根据应用程序的设置执行身份验证 
            (基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
          "Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后 
           在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
          "Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
           它为成员站点提供单独登录和核心配置文件服务。
    -->
    <authentication mode="Forms">
<forms name="eBookShop" loginUrl="UserLogin.aspx" protection="All" path="D:\eBookShop\database\eBookShop"/>
</authentication> 
<!--  授权 
           此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问
          应用程序资源。通配符: "*" 表示任何人,"?" 表示匿名
          (未经身份验证的)用户。
    -->
<authorization>
<allow users="*"/>
<!-- 允许所有用户 -->
<!--  <allow     users="[逗号分隔的用户列表]"
                             roles="[逗号分隔的角色列表]"/>
                  <deny      users="[逗号分隔的用户列表]"
                             roles="[逗号分隔的角色列表]"/>
            -->
</authorization>
<!--  应用程序级别跟踪记录
          应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。
          设置 trace enabled="true" 可以启用应用程序跟踪记录。如果 pageOutput="true",则
          在每一页的底部显示跟踪信息。否则,可以通过浏览 Web 应用程序
           根目录中的 "trace.axd" 页来查看
          应用程序跟踪日志。
    -->
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true"/>
<!--  会话状态设置
          默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
          如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
         若要禁用 Cookie,请设置 sessionState cookieless="true"。
    -->
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>
<!--  全球化
          此节设置应用程序的全球化设置。
    -->
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
<xhtmlConformance mode="Legacy"/></system.web>
<appSettings>
<add key="ConnectionString" value="server=localhost;database=D:\sql2000\MSSQL\Data\ebookshop;uid=sa;pwd="/>
<add key="mailUser" value=""/>
<add key="mailPwd" value=""/>
<add key="mailSmtpServer" value=""/>
<add key="mailSender" value=""/>
<add key="mailTitle" value=""/>
</appSettings>
<location path="OrderList.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration> --------------------编程问答-------------------- --------------------编程问答-------------------- <add key="ConnectionString" value="server=localhost;database=D:\sql2000\MSSQL\Data\ebookshop;uid=sa;pwd="/>
配置的连接字符串错误。
<add key="ConnectionString" value="server=.;database=ebookshop;uid=sa;pwd="/>
server=.或者直接填数据库服务器的ip,databas为你的数据库名。 --------------------编程问答-------------------- <add key="ConnectionString" value="server=localhost;database=D:\sql2000\MSSQL\Data\ebookshop;uid=sa;pwd="/>
配置的连接字符串错误。
<add key="ConnectionString" value="server=.;database=ebookshop;uid=sa;pwd="/>
server=.或者直接填数据库服务器的ip,databas为你的数据库名。 

按照你的设置运行,还是出现了同样的错误。不知道问题在哪里? --------------------编程问答-------------------- <add key="ConnectionString" value="server=localhost;database=D:\sql2000\MSSQL\Data\ebookshop;uid=sa;pwd="/>
配置的连接字符串错误。
<add key="ConnectionString" value="server=.;database=ebookshop;uid=sa;pwd="/>
server=.或者直接填数据库服务器的ip,databas为你的数据库名。 

guwei4037,你好 
按照你的设置运行,还是出现了同样的错误。不知道问题在哪里?  --------------------编程问答-------------------- 那要看你的SqlAccess.cs里面是怎么加载连接字符串并连接数据库的。 --------------------编程问答-------------------- guwei4037,你好
下面是SqlAccess.cs中的代码,帮忙看看问题在哪里呢?
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace eBookShop
{
/// <summary>
/// 数据访问层
/// </summary>

public abstract class SqlAccess 
{

//获得数据库连接字符串CONN_STRING
public static readonly string CONN_STRING = ConfigurationSettings.AppSettings["ConnectionString"];
public static string UserRole;
// Hashtable to store cached parameters
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connString)) 
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
//清除cmd的参数
cmd.Parameters.Clear();
return val;
}
}

public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}

public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}


public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
{
//pass through the call providing null for the set of SqlParameters
return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
}

public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);

try 
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch 
{
conn.Close();
throw;
}
}


public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
{
return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);
}

public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
using (SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();

//调用重载方法
return ExecuteDataset(cn, commandType, commandText, commandParameters);
}
}

/// <summary>
/// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided SqlConnection. 
/// </summary>
/// <remarks>
/// e.g.:  
///  DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
/// </remarks>
/// <param name="connection">a valid SqlConnection</param>
/// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
/// <param name="commandText">the stored procedure name or T-SQL command</param>
/// <returns>a dataset containing the resultset generated by the command</returns>
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
{
return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
}

/// <summary>
/// Execute a SqlCommand (that returns a resultset) against the specified SqlConnection 
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connection">a valid SqlConnection</param>
/// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
/// <param name="commandText">the stored procedure name or T-SQL command</param>
/// <param name="commandParameters">an array of SqlParamters used to execute the command</param>
/// <returns>a dataset containing the resultset generated by the command</returns>
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//创建一个SqlCommand对象,并对其进行初始化
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);

//创建SqlDataAdapter对象以及DataSet
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();

//填充ds
da.Fill(ds);

// 清除cmd的参数集合
cmd.Parameters.Clear();

//返回ds
return ds;
}


/// <summary>
/// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string 
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">a valid connection string for a SqlConnection</param>
/// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
/// <param name="commandText">the stored procedure name or T-SQL command</param>
/// <param name="commandParameters">an array of SqlParamters used to execute the command</param>
/// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
public static object ExecuteScalar(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connString)) 
{
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//执行查询,并返回查询所返回的结果集中第一行的第一列。
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}

/// <summary>
/// Execute a SqlCommand that returns the first column of the first record against an existing database connection 
/// using the provided parameters.
/// </summary>
/// <remarks>
/// e.g.:  
///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="conn">an existing database connection</param>
/// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
/// <param name="commandText">the stored procedure name or T-SQL command</param>
/// <param name="commandParameters">an array of SqlParamters used to execute the command</param>
/// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}


/// <summary>
/// add parameter array to the cache
/// </summary>
/// <param name="cacheKey">Key to the parameter cache</param>
/// <param name="cmdParms">an array of SqlParamters to be cached</param>
public static void CacheParameters(string cacheKey, params SqlParameter[] cmdParms) 
{
parmCache[cacheKey] = cmdParms;
}

/// <summary>
/// Retrieve cached parameters
/// </summary>
/// <param name="cacheKey">key used to lookup parameters</param>
/// <returns>Cached SqlParamters array</returns>
public static SqlParameter[] GetCachedParameters(string cacheKey) 
{
  SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
              if (cachedParms == null)
return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
          for (int i = 0, j = cachedParms.Length; i < j; i++)
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
         return clonedParms;
}
/// <summary>
/// Prepare a command for execution
/// </summary>
/// <param name="cmd">SqlCommand object</param>
/// <param name="conn">SqlConnection object</param>
/// <param name="trans">SqlTransaction object</param>
/// <param name="cmdType">Cmd type e.g. stored procedure or text</param>
/// <param name="cmdText">Command text, e.g. Select * from Products</param>
/// <param name="cmdParms">SqlParameters to use in the command</param>
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 
{
//判断连接的状态。如果是关闭状态,则打开
if (conn.State != ConnectionState.Open)
conn.Open();
//cmd属性赋值
cmd.Connection = conn;
cmd.CommandText = cmdText;
//是否需要用到事务处理
if (trans != null)
cmd.Transaction = trans;

cmd.CommandType = cmdType;
//添加cmd需要的存储过程参数
if (cmdParms != null) 
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
}
--------------------编程问答-------------------- 你在方法中并没有用到你从config里面都出来的CONN_STRING变量(连接字符串),代码太长,建议你自己单步调试一下,看看connection有没有成功初始化。 --------------------编程问答-------------------- guwei4037,你好
代码中已经用到了CONN_STRING

//获得数据库连接字符串CONN_STRING
public static readonly string CONN_STRING = ConfigurationSettings.AppSettings["ConnectionString"];
--------------------编程问答--------------------
引用 9 楼 lbbz323 的回复:
guwei4037,你好
代码中已经用到了CONN_STRING

//获得数据库连接字符串CONN_STRING
public static readonly string CONN_STRING = ConfigurationSettings.AppSettings["ConnectionString"];
    会不会是["ConnectionString"]出问题,你的ConnectionString是一个变量吧,不需要双引号吧? --------------------编程问答--------------------     会不会是["ConnectionString"]出问题,你的ConnectionString是一个变量吧,不需要双引号吧? 

这需要的,否则出问题了。
谢谢 --------------------编程问答-------------------- 怎么这么多问ado.net的链接问题的; 传送门
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,