接口文件using System;
using System.Collections.Generic;
using System.Text;namespace IDAL
{
    public interface ISiteInfo
    {
        int Save(string[] s);
    }
}继承接口的类using System;
using System.Collections.Generic;
using System.Text;
using IDAL;
using System.Data.SqlClient;
using DB;
using System.Data;
namespace SQLServer
{
    class Site:ISiteInfo
    {
        public int Save(string[] s)
        {
           SqlCommand cmd = new SqlCommand();
            SqlParameter[] parm = new SqlParameter[11]();
            string sql = "update site set SiteName=@SiteName,SiteUrl=@SiteUrl,IndexTemplet=@IndexTemplet,IndexFileName=@IndexFileName,NewsTemplet=@NewsTemplet,ClassListTemplet=@ClassListTemplet,SpecialTemplet=@SpecialTemplet,LoginTimeOut=@LoginTimeOut,Email=@Email,LinkType=@LinkType,CopyRight=@CopyRight";
            parm[0] = cmd.Parameters.AddWithValue("@SiteName", s[0]);
            parm[1] = cmd.Parameters.AddWithValue("@SiteUrl", s[1]);
            parm[2] = cmd.Parameters.AddWithValue("@IndexTemplet", s[2]);
            parm[3] = cmd.Parameters.AddWithValue("@IndexFileName", s[3]);
            parm[4] = cmd.Parameters.AddWithValue("@NewsTemplet", s[4]);
            parm[5] = cmd.Parameters.AddWithValue("@ClassListTemplet", s[5]);
            parm[6] = cmd.Parameters.AddWithValue("@SpecialTemplet", s[6]);
            parm[7] = cmd.Parameters.AddWithValue("@LoginTimeOut", s[7]);
            parm[8] = cmd.Parameters.AddWithValue("@Email", s[8]);
            parm[9] = cmd.Parameters.AddWithValue("@LinkType", s[9]);
            parm[10] = cmd.Parameters.AddWithValue("@CopyRight", s[10]);            using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString))
            {
                conn.Open();
                SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, null); 
            }
            return 0;
        }
    }
}调用接口的类:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
using IDAL;
using SQLServer;
namespace BLL
{
    /// <summary>
    /// 此类用于实现对Site表的业务逻辑.
    /// </summary>
    public class SiteInfo
    {
        /// <summary>
        /// 保存站点信息
        /// </summary>
        public static int SaveSiteInfo(string[] s)
        {
           ISiteInfo siteinfo = new Site();
            siteinfo.Save(s);
        }
    }
}传递给业务逻辑(BLL)层的数组对象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 BLL;
public partial class Admin_System_Site : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {    }
    protected void Submit_Click(object sender, EventArgs e)
    {
        string[] s = new string[11];
        s[0] = SiteName.Text;
        s[1] = SiteUrl.Text;
        s[2] = IndexTemplet.Text;
        s[3] = IndexFileName.Text;
        s[4] = NewsTemplet.Text;
        s[5] = ClassListTemplet.Text;
        s[6] = SpecialTemplet.Text;
        s[7] = LoginTimeOut.Text;
        s[8] = Email.Text;
        s[9] = "a";
        s[10] = CopyRight.Text;
            }
}Sqlhepler中的代码:        /// <summary>
        /// 用现有的数据库连接执行一个sql命令(不返回数据集)
        /// </summary>
        /// <param name="conn">一个现有的数据库连接</param>
        /// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        /// <param name="commandText">存储过程名称或者sql命令语句</param>
        /// <param name="commandParameters">执行命令所用参数的集合</param>
        /// <returns>执行命令所影响的行数</returns>
        public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {            SqlCommand cmd = new SqlCommand();            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }
编译时提示:
1:SQLServer.Site.Save(string[])并未所有的代码路径都有返回值.
2:BLL.SiteInfo.SaveSiteInfo(string[])并未所有的代码路径都有返回值.
问题1:sqlhelper中不是有返回值吗?为什么提示没有返回值?
问题2:能否像如下方式使用Sqlparmeter,为什么?SqlParameter[] parm = new SqlParameter[11]();
            string sql = "update site set SiteName=@SiteName,SiteUrl=@SiteUrl,IndexTemplet=@IndexTemplet,IndexFileName=@IndexFileName,NewsTemplet=@NewsTemplet,ClassListTemplet=@ClassListTemplet,SpecialTemplet=@SpecialTemplet,LoginTimeOut=@LoginTimeOut,Email=@Email,LinkType=@LinkType,CopyRight=@CopyRight";
            parm[0] = cmd.Parameters.AddWithValue("@SiteName", s[0]);
            parm[1] = cmd.Parameters.AddWithValue("@SiteUrl", s[1]);
            parm[2] = cmd.Parameters.AddWithValue("@IndexTemplet", s[2]);
            parm[3] = cmd.Parameters.AddWithValue("@IndexFileName", s[3]);
            parm[4] = cmd.Parameters.AddWithValue("@NewsTemplet", s[4]);
            parm[5] = cmd.Parameters.AddWithValue("@ClassListTemplet", s[5]);
            parm[6] = cmd.Parameters.AddWithValue("@SpecialTemplet", s[6]);
            parm[7] = cmd.Parameters.AddWithValue("@LoginTimeOut", s[7]);
            parm[8] = cmd.Parameters.AddWithValue("@Email", s[8]);
            parm[9] = cmd.Parameters.AddWithValue("@LinkType", s[9]);
            parm[10] = cmd.Parameters.AddWithValue("@CopyRight", s[10]);

解决方案 »

  1.   

           public static int SaveSiteInfo(string[] s)
            {
               ISiteInfo siteinfo = new Site();
                siteinfo.Save(s);
            }
    ==
           public static int SaveSiteInfo(string[] s)
            {
               ISiteInfo siteinfo = new Site();
                return siteinfo.Save(s);
            }
      

  2.   

    public static int SaveSiteInfo(string[] s)
            {
               ISiteInfo siteinfo = new Site();
                siteinfo.Save(s);
            }
    ----------》
    public static int SaveSiteInfo(string[] s)
            {
               ISiteInfo siteinfo = new Site();
               return  siteinfo.Save(s);
            }
      

  3.   

    你没必要声明SqlParameter[]吧
    根本没用到啊~~
    直接
    cmd.Parameters.AddWithValue("@SiteName", s[0]);
    就可以了
      

  4.   


    恩,就是,你SqlParameter根本就没用上
      

  5.   

    using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString))
                {
                    conn.Open();
                    SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, null); 
                }
                return 0;--------------
    继承接口的类 这里执行都是返回0.
      

  6.   

    楼主绝对是个高手,不过我想问一下,2、3楼 的改正还不对吗?
    SQLServer.Site.Save(string[])并未所有的代码路径都有返回值. 是不是因为using 语句有异常时直接返回了,这时没有代码进行返回,所以才有此提示,臆想,没有sqlhelper没有进行验证,只是个思路
      

  7.   

    return问题我想明白了,应该是return 方法名(方法参数).谢谢2  3楼的朋友,等第二个问题解决后我给两位朋友分.
    第二个问题:
    在sqlserver类中是想使用参数的,只不过调试时没写上.问题2:能否像如下方式使用Sqlparmeter,为什么? C# code
    SqlParameter[] parm = new SqlParameter[11]();
                string sql = "update site set SiteName=@SiteName,SiteUrl=@SiteUrl,IndexTemplet=@IndexTemplet,IndexFileName=@IndexFileName,NewsTemplet=@NewsTemplet,ClassListTemplet=@ClassListTemplet,SpecialTemplet=@SpecialTemplet,LoginTimeOut=@LoginTimeOut,Email=@Email,LinkType=@LinkType,CopyRight=@CopyRight";
                parm[0] = cmd.Parameters.AddWithValue("@SiteName", s[0]);
                parm[1] = cmd.Parameters.AddWithValue("@SiteUrl", s[1]);
                parm[2] = cmd.Parameters.AddWithValue("@IndexTemplet", s[2]);
                parm[3] = cmd.Parameters.AddWithValue("@IndexFileName", s[3]);
                parm[4] = cmd.Parameters.AddWithValue("@NewsTemplet", s[4]);
                parm[5] = cmd.Parameters.AddWithValue("@ClassListTemplet", s[5]);
                parm[6] = cmd.Parameters.AddWithValue("@SpecialTemplet", s[6]);
                parm[7] = cmd.Parameters.AddWithValue("@LoginTimeOut", s[7]);
                parm[8] = cmd.Parameters.AddWithValue("@Email", s[8]);
                parm[9] = cmd.Parameters.AddWithValue("@LinkType", s[9]);
                parm[10] = cmd.Parameters.AddWithValue("@CopyRight", s[10]);
    sqlparameters的正常使用方法需要指定很多参数,太累,我查资料得知cmd.Parameters.AddWithValue("@CopyRight", s[10]);的写法也是对的.那么我能否这样使用sqlhelp?
     using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString))
                {
                    conn.Open();
                    SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, parm); 
                }
    还有传递过来的数组有字符串也有数字,大家一般在哪处理?是bll还是dal层处理?或者大家都什么更好的办法?
      

  8.   

    public class SiteInfo
        {
            /// <summary>
            /// 保存站点信息
            /// </summary>
            public static int SaveSiteInfo(string[] s)
            {
               ISiteInfo siteinfo = new Site();
               return siteinfo.Save(s);
            }
        }
    第二个问题,可以自己写一个生成参数的类,以后直接调用就可以了
      

  9.   

    asp.net夜话之七:ADO.NET介绍
    ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。 
    http://blog.csdn.net/zhoufoxcn/archive/2008/10/13/3066799.aspx看看上面的文章你就明白什么样能行,什么样不能行了。甚至你完全可以抛开SQLHelper写自己的数据库访问通用类。