标签归档:c#

c# 对表变量(datatable)增加列并赋值的方法分享


摘要:
下文将分享对datatable变量增加列并赋值的方法分享,如下所示:


  DataTable tbTest = new DataTable();
        tbTest.Columns.Add("keyId", typeof(int));
        for (int i = 0; i < 88; i++)
        {
            tbTest.Rows.Add();
            tbTest.Rows[i][0] = i;
        }
        DataColumn tbColumn = new DataColumn("qty", typeof(int));
        tbColumn.DefaultValue = 88; -------默认值设置方式一定要在add列的方法前面,谨记!!!
        tbTest.Columns.Add(tbColumn);
        这种设置默认值的方式,可以使表tbTest中原有行中新增列的默认值为88 

c# 获取sqlserver 运行脚本的print消息的方法分享


摘要:
在sql脚本的编写中,我们经常使用sql脚本print消息,作为输出测试,
通过获取print消息,我们可以快速获取程序中的错误信息,下文讲述通过 SqlInfoMessageEventHandler 获取print信息,如下所示:
实验环境:sqlserver 2008 R2


 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


using System.Data; 
using System.Data.SqlClient;
namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {


        webCrm.SAG tmp = new webCrm.SAG();

        protected void Page_Load(object sender, EventArgs e)
        {
            

            /*获取 sql print的消息信息*/
             string connectionString = "data source=***********;initial catalog=boss;user id=sa;password=erp;";

              using (SqlConnection sqlcon = new SqlConnection(connectionString))
            {
                sqlcon.Open();
                sqlcon.InfoMessage += new SqlInfoMessageEventHandler(OnReceivingInfoMessage);
                /* 查询某个表上的索引碎片的详细信息 */
                SqlCommand cmd = new SqlCommand("print '输出消息1';  set statistics io  on ;select * from [ierror] ; print '输出sql消息完毕'", sqlcon);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
            Console.Read();


        }

         

        private  void OnReceivingInfoMessage(object sender, SqlInfoMessageEventArgs e)
        { 
            Response.Write("输出sql消息:" + e.Message.ToString());
        }




    }
}

----------------------输出-------------------------------------------------------------------------
 输出sql消息:输出消息1
表 'IError'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
输出sql消息完毕

会话共享解决方案—(负载均衡)


摘要:
下文讲述在c#开发中,如何部署session,使其可以在不同的web服务器中共享,具体方法如下所示:

在使用Session对象的c# web程序中,我们需在页面上使用@page指令的EnableSessionState属性为True或Readonly,
并且在Web.config文件中正确设置了SessionState属性,页面才可以使用session。
c#中Sessions的状态保留方式,取决于web.config文件中sessionstate的配置属性,
该属性有四种可能的值:Off,Inproc,StateServer和SQlServer。
off:设置禁用会话。
Inproc是默认设置。该模式与之前的ASP会话状态相似。会话的状态存储在ASP.NET进程中。其优点是显而易见的:性能。进程中的数据访问自然比夸大的进程更快。但是,此方法的状态Session取决于ASP.NET进程。当IIS进程正常崩溃或重新启动时,进程中保存的状态将丢失。
为了克服Inproc模型的缺点,ASP.NET提供了两种维护会话状态进程外的方法。
ASP.NET首先提供了Windows服务:ASPState。服务启动后,ASP.NET应用程序可以将mode属性设置为“SateServer”,以使用此Windows服务提供的状态管理方法。
除了在web.config文件中将mode属性设置为StateServer之外,还必须设置运行StateServer的服务器的IP地址和端口号。
1,如果您在IIS所在的机器上运行StateServer,则IP地址为127.0.0.1,端口号通常为42424.配置如下:
mode=”StateServer”
stateConnectionString = “TCPIP = 127.0.0.1:42424”
2,找一台服务器作为会话服务器(如IP:10.15.162.188),在Windows启动它的ASP.NET State Service(默认端口号为42424),将启动类型改为自动;
3.修改Session Server注册表中HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ aspnet_state \ Parameters中的AllowRemoteConnection项的值。端口键控制ASP.NET状态服务的侦听端口;您需要重新启动ASP.NET状态服务生效;
4,每个服务器的web.config stateConnectionString指向这个服务器。
使用此模型,会话状态的存储将不依赖于IIS进程的失败或重新启动,并且会话状态将存储在StateServer进程的内存空间中。
另一个会话状态模式是SQL Server模式。该模式将会话的状态保存在SQL Server数据库中。在使用此模式之前,您必须至少拥有一台SQL Server服务器,并在服务器中创建所需的表和存储过程。 .NET SDK提供了两个脚本来简化此任务:InstallSqlState.sql和UnInstallSqlState.sql。这两个文件存储在以下路径中:
系统驱动器\WINNT \ Microsoft.NET \ Framework \ version \
要配置SQL Server服务器,可以从命令行运行由SQL Server提供的命令行工具osql.exe
 osql -s [server name] -u [user] -p [password]
  例如:
 osql -s (local) -u as -p “”-i InstallSqlState.sql
完成必要的数据库准备后,将web.config文件中sessionstate元素的mode属性更改为“sqlserver”并指定SQL连接字符串。
如下所示:
mode= “SQLServer”
sqlConnectionString =“data source = 127.0.0.1; userid = sa; password =sa; Trusted_Connection = yes”
使用SQL Server模式可以使Session的状态独立于IIS服务器。您还可以使用SQL Server群集使状态存储独立于单个SQL Server。这可以为应用提供很高的可靠性。