//数据操作的公共类
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;namespace DAL
{
    public class SqlAccess
    {
        private static string connStr = @"server=CHINA-6F2289564;database=DiagSys;uid=sa;pwd=;";
        //private static string connStr = @"server=.;database=DissSys;uid=sa;pwd=xingjian;";
        //private static string connStr = @"server=My-PC\SQL2005;database=DissSys;uid=sa;pwd=xingjian;";        private static SqlConnection conn = new SqlConnection(connStr);
        //获取联接对象
        public static SqlConnection GetConn()
        {
            
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            return conn;
          
        }        public static void CloseCon()
        {
            conn.Close();
        }        //获取查询结果记录集的dataSet对象
        public static DataSet GetDataSet(string sqlStr)//,string tableName)
        {
            //SqlCommand cmd=new SqlCommand(sqlStr,GetConn());
            SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, GetConn());
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            return ds;
        }        public static DataSet GetDataSet(string sqlStr,string tableName)
        {
            //SqlCommand cmd = new SqlCommand(sqlStr, GetConn());
            SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, GetConn());
            DataSet ds = new DataSet();
            adapter.Fill(ds,tableName);
            return ds;
        }        //插入记录
        public static int ExecteNonQuery(string sqlStr)
        {
            int res = 0;
            SqlCommand cmd = new SqlCommand(sqlStr, GetConn());            res = cmd.ExecuteNonQuery();
            try
            {
                res = cmd.ExecuteNonQuery();
            }
            catch
            {
                res = 0;
            }
            CloseCon();
            return res;
        }
    }
}
//数据操作的页面(执行操作)using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using DAL;public partial class Admin_dissNameAddBtn : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        /*病名添加按钮后台处理*/        //string dissName = Request.QueryString["dissName"];
        string dissName = "肺炎";
        //string dissName = Server.UrlDecode(Request.QueryString["dissName"]).ToString().Replace(")", "").Replace("--", "").Replace(",", "");
        string sqlStr = "insert into dissInfo(diss_name)values('" + dissName + "')";
        int res = 0;
        try
        {            res = SqlAccess.ExecteNonQuery(sqlStr);           
        }
        catch
        {
            SqlAccess.CloseCon();
            
            Response.Write("0");
            Response.End();
        }
        //添加成功查询出ID并返回
        if (res > 0)
        {
            string sqlStr1 = "select diss_id from dissInfo where diss_Name='" + dissName + "'";
            DataSet ds = new DataSet();
            ds = SqlAccess.GetDataSet(sqlStr1);
            if (ds.Tables[0].Rows.Count > 0)
            {
                res = int.Parse(ds.Tables[0].Rows[0][0].ToString());
                Response.Write(res.ToString());
                Response.End();
            }
            else
            {
                Response.Write("1");
                Response.End();
            }
        }
        else
        {
            Response.Write(res.ToString());
            //Response.Write("2");
            Response.End();
        }
    }
}
弄了很久 没看出哪里有错~ 求解

解决方案 »

  1.   

    insert into dissInfo(diss_name)values('肺炎')
    这句在查询分析器执行过啦 OK的 可以影响一行
      

  2.   

    数据插入不成功 也没有错误提示 Response.Write(res.ToString());
    返回的是0
      

  3.   

    先把ExecteNonQuery方法中trycatch去掉,看看有无异常抛出。
      

  4.   

    本帖最后由 net_lover 于 2012-03-19 21:10:11 编辑
      

  5.   


    没有执行两次 呵呵 刚才有点心急 代码没处理好就贴上来了 原来是为了看有没异常
      //插入记录
            public static int ExecteNonQuery(string sqlStr)
            {
                int res = 0;
                SqlCommand cmd = new SqlCommand(sqlStr, GetConn());            res = cmd.ExecuteNonQuery();
                //try
                //{
                //    res = cmd.ExecuteNonQuery();
                //}
                //catch
                //{
                //    res = 0;
                //}
                CloseCon();
    老大 按你说的 改了 测试了下 还是没异常抛出 测试的是这个dissNameAddBtn.aspx页面
    aspx:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="dissNameAddBtn.aspx.cs" Inherits="Admin_dissNameAddBtn" %>aspx.cs:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using DAL;public partial class Admin_dissNameAddBtn : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            /*病名添加按钮后台处理*/        string dissName = Request.QueryString["dissName"];
            //string dissName = "肺炎";
            //string dissName = Server.UrlDecode(Request.QueryString["dissName"]).ToString().Replace(")", "").Replace("--", "").Replace(",", "");
            string sqlStr = "insert into dissInfo(diss_name)values('" + dissName + "')";
            int res = 0;
            try
            {            res = SqlAccess.ExecteNonQuery(sqlStr);           
            }
            catch
            {
                SqlAccess.CloseCon();
                
                Response.Write("0");
                Response.End();
            }
            //添加成功查询出ID并返回
            if (res > 0)
            {
                string sqlStr1 = "select diss_id from dissInfo where diss_Name='" + dissName + "'";
                DataSet ds = new DataSet();
                ds = SqlAccess.GetDataSet(sqlStr1);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    res = int.Parse(ds.Tables[0].Rows[0][0].ToString());
                    Response.Write(res.ToString());
                    Response.End();
                }
                else
                {
                    Response.Write("1");
                    Response.End();
                }
            }
            else
            {
                Response.Write(res.ToString());
                //Response.Write("2");
                Response.End();
            }
        }
    }
    运行的结果 就是 一个 0
                return res;删的不干净 才变两次了 
      

  6.   


    执行cmd.ExecuteNonQuery()之前sqlconnection在哪里打开的?
      

  7.   

    这句SqlCommand cmd = new SqlCommand(sqlStr, GetConn());
    调用了Getconn() 打开了 Getconn在前面的部分定义了 
     private static string connStr = @"server=CHINA-6F2289564;database=DiagSys;uid=sa;pwd=;"; private static SqlConnection conn = new SqlConnection(connStr);
      //获取联接对象
      public static SqlConnection GetConn()
      {
        
      if (conn.State == ConnectionState.Closed)
      {
      conn.Open();
      }
      return conn;
        
      }
      

  8.   

      try
       {   res = SqlAccess.ExecteNonQuery(sqlStr);     
      }
       catch(Excepion ex)
       {
          throw ex;   
       }把错误打出来看看
     
      

  9.   


     string sqlStr = "insert into dissInfo(diss_name)values('" + dissName + "')";string sqlStr = "insert into dissInfo(diss_name)空格values('" + dissName + "')";
      

  10.   

    再补充一下 数据库名是DiagSys  要插入的表名是 dissInfo   diss_id自增 bigint 8  diss_name varchar 100 应该也没问题呐
      

  11.   

    CS0246: 找不到类型或命名空间名称“Excepion”(是否缺少 using 指令或程序集引用?)Excepion命名空间是什么 老大
      

  12.   

    Exception
    一看不就是写漏字了吗
      

  13.   

    Exception 
    你把所有的trycatch都去掉,应该不会没错的。
      

  14.   


    ExceptionVS不是有自动提示吗
      

  15.   

    有trycatch的两个地方都改成这样啦 
    第一个:
      res = SqlAccess.ExecteNonQuery(sqlStr);        //try
            //{        //    res = SqlAccess.ExecteNonQuery(sqlStr);           
            //}        //catch (Excepion ex)
            //{
            //    System.Web.HttpContext.Current.Response.Write(ex.Message);        //}        //catch
            //{
            //    SqlAccess.CloseCon();        //    Response.Write("0");
            //    Response.End();
            //}
    第二个:  res = cmd.ExecuteNonQuery();         
      //          try
      //          {
      //              res = cmd.ExecuteNonQuery();
      //          }
      //          catch(Exception ex)
      //{
      //res = 0;
      //System.Web.HttpContext.Current.Response.Write(ex.Message);
      //}还是没异常啊~
      

  16.   

    在执行插入操作的语句前输出connection的状态看看。
      

  17.   

    你的dissInfo表几个字段?
    sa帐号有插入的权限么
      

  18.   

    对了,你故意把insert into这条sql语句写错,看看会怎么样。
      

  19.   


    有5个字段 除了上面说明的 diss_id 自增 和 diss_name 非空外 其他三个都可以为空 sa 有插入权限的 因为 用查询分析器来 测试过啦 可以插入 insert into dissInfo(diss_name)values('鼻炎')
    insert into dissInfo(diss_name)values('感冒')都已经插入成功了
      

  20.   


    在SqlAccess.cs公共类里 
    定义为      private static SqlConnection conn = new SqlConnection(connStr);在dissNameAddBtn.aspx Response.Write(SqlAccess.Conn.state);提示 DAL.SqlAccess”并不包含“Conn”的定义把private static SqlConnection conn = new SqlConnection(connStr);改为 public static SqlConnection conn = new SqlConnection(connStr);还是 提示 DAL.SqlAccess”并不包含“Conn”的定义
      

  21.   

    那就奇怪啦。
    CHINA-6F2289564
    这个机器是你测试的机器吗?你确认没有连错机器?
      

  22.   


    哇哇哇 好像摸到点边了 现在把sql语句写错了 去掉了一个单引号   string sqlStr = "insert into dissInfo(diss_name)values(" + dissName + "')";  还是没报错 还是 返回0 是不是 说明 数据库没打开 没连上?
      

  23.   


    嗯 没有连错 是我的计算机的名字 我现在是把一个系统改版 重组  原版就用的 这句 是对的 可以返回 数字19 重组系统里新建的这个页面就是 不行 奇怪了 对了  SqlAccess.cs公共类是放在DAL文件夹里的 DAL文件夹里还有bin obj properties三个文件夹 
    一个DAL.csproj 
      

  24.   

    你这样写一段测试页面呢SqlConnection conn = new SqlConnection("server=CHINA-6F2289564;database=DiagSys;uid=sa;pwd=;");
    string sqlStr = "insert into dissInfo(diss_name) values('" + "肺炎" + "')";
    conn.Open();
    SqlCommand cmd = new SqlCommand(sqlStr, conn);
    int x = cmd.ExecuteNonQuery();
    Response.Write(x);
      

  25.   

    你把sql语句写成string sqlStr = "insert into";看看,是不是还是没报错,返回0?
      

  26.   

    另外,static类型的变量是所有用户共享的,你的某些做法可能会在并发的时候导致问题
      

  27.   

    新建了一个WebSite1 (6) 网站 
    Default.aspx页面 
    Default.aspx.cs
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=CHINA-6F2289564;database=DiagSys;uid=sa;pwd=;");
            string sqlStr = "insert into dissInfo(diss_name) values('" + "肺炎" + "')";
            conn.Open();
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            int x = cmd.ExecuteNonQuery();
            Response.Write(x);
        }
    }插入 成功了   返回1   那就是 我引用SqlAccess.cs公共类有问题SqlAccess.cs公共类是放在DAL文件夹里的 DAL文件夹里还有bin obj properties三个文件夹  
    一个DAL.csproj  
      

  28.   

    OK 问题解决了 重写了 SqlAccess.cs公共类就行了
    net_lover老大 说对了 前面 我两个系统引用同一个 公共类 应该是 冲突问题 dalmeeme老大  指导我故意把 sql语句 改错也提供了一点发现 发现 数据库没有连上  
    谢谢大家啦
      

  29.   

    你把insert语句改成删除或者更新语句,看看有没有错误~~~