Datawindow.Net version 2.0使用概要
1. 安装
先安装.net2005 ,框架版本2.0,然后安装DataWindow.Net 2.0组件及设计编译环境。
安装后在.net2005窗体设计时会出现Sybase DataWindow控件页签。
2. 使用
DataWindow控件可以直接在C#窗体中使用。
3. 设计DataWindow
在PB或DataWindow Designer设计环境中设计数据窗,并存到.pbl中,供程序调用。
发布后可以编译成.pbd文件格式(还未测试)。
4. C#中调用DataWindow
a) 窗体上创建一个Datawindow控件 起名为dw。
b)
Sybase.DataWindow.Transaction Trans = new Sybase.DataWindow.Transaction();
Trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;//数据库连接方式
Trans.Password = "123";
Trans.UserID = "sa";
Trans.AutoCommit = false;
Trans.Lock = "RC";
Trans.DbParameter = “PROVIDER=''SQLOLEDB'',DATASOURCE=''xiancai'',
PROVIDERSTRING=''database=demo''”;//数据库连接串
Trans.Connect();//连接数据库
d) 显示数据窗
dw.LibraryList = “test.pbl”;//发布后使用.pbd文件
dw.DataWindowObject = "datawindowName";//数据窗名称
dw.SetTransaction(Trans );
dw.Retrieve();//显示数据窗
e) 关闭连接
Trans.Disconnect();
============or================================or===================
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
Sybase.DataWindow.AdoTransaction adTrans;
conn.ConnectionString = "Server=localhost;Initial Catalog=Northwind;User ID=sa;Password=sa;"//Provider=SQLOLEDB;
conn.Open();
adTrans = new Sybase.DataWindow.AdoTransaction(conn);
dw_1.LibraryList = "test.pbl";
dw_1.DataWindowObject = "datawindowName";
adTrans.BindConnection();
dw_1.SetTransaction(adTrans);
dw_1.Retrieve();
conn.Close();
5. c#中利用DataWindow控件操作数据
a) 添加
int row = this.dw.InsertRow(0);//插入一条记录
dw.SetRow(row);
dw.SetItemString(row,"ID",”100”);//给字段赋值
dw.SetItemString(row,"名称","name"); //给字段赋值
b) 删除
this.dw.DeleteRow( 1 );//删除第一行记录
c) 保存
this.dw.UpdateData( true, true );
Trans.Commit();//数据提交后才写入数据库中
经过上面系列一,二的讲解,相信朋友们,对Datawindow.net有了初步的认识,本系列三,从datawindow.net的配套的一个datawindow Designer入手,讲解。
我们使用datawindow.net的初终,就是基于其强大的datawindow处理,所以datawindow designer的使用,是必须的!前面使用的pbl文件,就是有其设计的。如果你使用过pb,特别是pb9.0,那么对你来说,是非常轻松的,可以说完全相同。
设计中的小插曲:
--------------------------------------------------------------------------------
1.在PB的数据窗口中,当使用了分组的情况下,没有直接的方法可以直接显示出当前行所在组的组的行数。在测试中发现了下面的方法可以显示当前的组的行数:
第一步:在数据窗口中新建一个分组,假设当前组为第1组 。
第二步:再在Detial中加入一个计算列,命名为compute_1,把Visible = false,计算列的表达式设为If(cumulativeSum( 1 for group 1) = 1 , 1 ,0)
这样可以确定每一个分组第一行的compute_1值为1,其他行数在当前分组中为0,为下一步打好基础。
第三步:再在Detial区域中放入第二个计算列compute_2,把表达式定义为:
cumulativeSum( compute_1 for all)
这样compute_2所显示的即是所要得到的当前行所在的组的行数。由于第二步的表达式使得每一组中只有第一行的数值为1,其他均为0,所以可以使用cumulativeSum使用函数得到 当前组的行数。
其中使用了数据窗口函数cumulativeSum(),该函数简介如下:
功能 计算从头开始到当前行(包括当前行)位置的累进和。
语法 CumulativeSum ( column { FOR range } )
参数 column:指定要计算累进和的列。column可以是列名,也可以使用以#开始的列号,还可以是其值代表列的表达式。column的类型必须是数值型数据类型。
range:可选项,指定计算累进和的数据范围。对大多数风格的数据窗口来说,range的有效取值为:
1、ALL棗缺省值,计算指定列所有行的累进和
2、GROUP n 棗计算第n组中指定列的累进和,n指定组号
3、PAGE 棗计算当前页中指定列的累进和对交叉表(Crosstab)风格的数据窗口对象来说,range的有效取值为CROSSTAB,表示计算交叉表中该列所有数据行的累进和。
对Graph和OLE对象来说,在range中指明对象类型。聚合函数的值由该对象本身定义的数据范围决定,range的有效取值为:
4、Graph棗只用于Graph对象,行的范围由Graph对象的Row选项决定
5、OBJECT棗只用于OLE对象,行的范围由OLE对象的Row选项决定
返回值 与指定列的数据类型相同。函数返回指定列指定范围数据的累进和。
用法 指定range参数后,在range参数指定的每个范围开始时,CumulativeSum()函数从头开始计算累进和。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/06/1869495.aspx
系列 五--讲述page的分页
可以看看实现的效果图
CheckBox:Show Page Info------show or hide Page total information
DropDownList:Place-----show page navigation top , bottom or topbottom
ChekBox:Image Navigation---determine whether use arrow image or not
DropDownList:Page Type----determine use whick page navigation :NextPrev,NextPrevWithQuickGo,Numeric, NumericWithQuickGo, QuickGo
DropDownList:Goto Page Type:---quick go type:edit or dropdownlist(hide)
--------------------------------------------------------------------------------
aspx code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo002.aspx.cs" Inherits="itwms.page.demo002" %>
<%@ Register Assembly="WebDataWindow" Namespace="Sybase.DataWindow.Web" TagPrefix="dw" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>DataWindow.Net Page Demo</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="typeLabel" runat="server" Text="Page Type:" Width="77px" style="z-index: 100; left: 8px; overflow: auto; position: absolute; top: 76px;"></asp:Label>
<asp:Label ID="gotoPageTypeLabel" runat="server" Style="z-index: 100; left: 8px; overflow: auto;
position: absolute; top: 100px" Text="GoTo Page Type:" Width="122px" Visible="False"></asp:Label>
<asp:Label ID="placeLabel" runat="server" Style="z-index: 100; left: 8px; overflow: auto;
position: absolute; top: 29px" Text="Place:" Width="83px"></asp:Label>
<div style="width: 860px; height: 323px; z-index: 100; left: 14px; overflow: auto; position: absolute; top: 130px;">
<dw:WebDataWindowControl ID="webDWcntrl" runat="server" DataWindowObject="dw_cust_grid" Height="291px" LibraryList="~/page/northwind.pbl" Width="824px" AutoRestoreDataCache="True" AutoSaveDataCacheAfterRetrieve="True" PagingMethod="Callback" RowsPerPage="10" Visible="False">
<PageNavigationBarSettings Visible="True">
<BarStyle Font-Names="Verdana" Font-Size="Medium" />
</PageNavigationBarSettings>
</dw:WebDataWindowControl>
</div>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Generate" style="z-index: 100; left: 787px; overflow: auto; position: absolute; top: 15px;" />
<asp:CheckBox ID="imageCheckBox" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 53px;" Text="Image Navigation" Width="174px" />
<asp:CheckBox ID="pageInfoCheckBox" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 5px;" Text="Show Page Info" Width="176px" />
<asp:DropDownList ID="placeDropDownList" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 28px;" Width="176px" >
<asp:ListItem>Top</asp:ListItem>
<asp:ListItem>Bottom</asp:ListItem>
<asp:ListItem>TopBottom</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="typeDropDownList" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 76px;" Width="176px" OnSelectedIndexChanged="typeDropDownList_SelectedIndexChanged" AutoPostBack="True" >
<asp:ListItem Selected="True">NextPrev</asp:ListItem>
<asp:ListItem>NextPrevWithQuickGo</asp:ListItem>
<asp:ListItem>Numeric</asp:ListItem>
<asp:ListItem>NumericWithQuickGo</asp:ListItem>
<asp:ListItem>QuickGo</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="gotoPageTypeDropDownList" runat="server" style="z-index: 100; left: 134px; overflow: auto; position: absolute; top: 100px;" Width="176px" OnSelectedIndexChanged="typeDropDownList_SelectedIndexChanged" AutoPostBack="True" Visible="False" >
<asp:ListItem>Edit</asp:ListItem>
<asp:ListItem>DropDowList</asp:ListItem>
</asp:DropDownList></div>
</form>
</body>
</html>
cs code:
--------------------------------------------------------------------------------
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;
namespace itwms.page
{
public partial class demo002 : System.Web.UI.Page
{
private Sybase.DataWindow.Transaction Trans;
private System.ComponentModel.IContainer container;
protected void Page_Load(object sender, EventArgs e)
{
InitializeComponent();
//if (!IsPostBack)
//{
// Trans.Connect();
// webDWcntrl.SetTransaction(Trans);
// webDWcntrl.Retrieve();
//}
}
private void InitializeComponent()
{
container = new System.ComponentModel.Container();
Trans = new Sybase.DataWindow.Transaction(container);
Trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;
Trans.Password = "password";
Trans.UserId = "sa";
Trans.AutoCommit = false;
Trans.Lock = "RC";
Trans.DbParameter = "PROVIDER='SQLOLEDB',DATASOURCE='server',PROVIDERSTRING='database=Northwind'";
}
protected void Button1_Click(object sender, EventArgs e)
{
webDWcntrl.Visible = true;
Trans.Connect();
webDWcntrl.SetTransaction(Trans);
webDWcntrl.Retrieve();
setProperties();
}
private void setProperties()
{
if (pageInfoCheckBox.Checked)
{
webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Visible = true;
webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Position = Sybase.DataWindow.Web.PageStatusInfoPosition.Right;
}
else
{
webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Visible = false;
}
switch (placeDropDownList.SelectedIndex)
{
case 0:
webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.Top;
break;
case 1:
webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.Bottom;
break;
case 2:
webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.TopAndBottom;
break;
default:
goto case 1;
}
if (imageCheckBox.Checked)
{
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.FirstPageImageUrl = Page.Server.MapPath("../image/PageFirst.gif");
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.PrevPageImageUrl = Page.Server.MapPath("../image/PagePrior.gif");
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.NextPageImageUrl = Page.Server.MapPath("../image/PageNext.gif");
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.LastPageImageUrl = Page.Server.MapPath("../image/PageLast.gif");
}
else
{
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.FirstPageImageUrl = "";
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.PrevPageImageUrl = "";
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.NextPageImageUrl = "";
webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.LastPageImageUrl = "";
}
switch (typeDropDownList.SelectedIndex)
{
case 0:
webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NextPrev;
break;
case 1:
webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NextPrevWithQuickGo;
break;
case 2:
webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.Numeric;
break;
case 3:
webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NumericWithQuickGo;
break;
case 4:
webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.QuickGo;
break;
default:
goto case 0;
}
if (typeDropDownList.SelectedIndex.Equals(4))
{
switch (gotoPageTypeDropDownList.SelectedIndex)
{
case 0:
webDWcntrl.PageNavigationBarSettings.QuickGoNavigator.Type = Sybase.DataWindow.Web.QuickGoPageNavigatorType.Edit;
break;
case 1:
webDWcntrl.PageNavigationBarSettings.QuickGoNavigator.Type = Sybase.DataWindow.Web.QuickGoPageNavigatorType.DropDownList;
break;
}
}
}
protected void typeDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
imageCheckBox.Visible = true;
switch (typeDropDownList.SelectedIndex)
{
case 2:
goto case 3;
case 4:
gotoPageTypeDropDownList.Visible = true;
gotoPageTypeLabel.Visible = true;
goto case 3;
case 3:
imageCheckBox.Checked = false;
imageCheckBox.Visible = false;
break;
}
}
}
}
当然这些,是通过code实现的,因为我为了页面实现多种分页方式,下面介绍一下,属性设置某一种分页方式:
如图:
我们可以随意设置,几个需要强调的地方:
a,RowsPerPage不能为0;
b,各自对应的visible不要忘记;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/07/1872044.aspx
这几天,一直在测试datawindow.net 2.0+vs2..5共用的问题,觉得总体还不错,虽然已经发布到v2.0,v2.5也已经到评估阶段,另我不满意的就是,参考资料,确实太少,很多问题,都要自己测试,总结,也坚定了我把这个系列写下去的决心,方便后来的新手,能入门更快一些。
以上5个系列的简述,也是我测试的过程,属于边测试边总结吧。
本系列的测试环境为:
vs2.0+sql server 2000+ajax
主要目的:
1,要弄清楚datawindow.net是不是真的强大?关系到,下一个项目的开发架构。
2,与ajax是否兼容?
3,中文问题,会否出现乱码?其实,就是多语言问题啦。
到目前测试阶段,赶到datawindow.net还可以,但是也许是技术新或者使用不多,发现参考文档有限,开发会多少碰到些问题,还好有些pb开发的功底,否则又要费时了!也算间接回答了第一个问题,算是强大吧!对.net来说,作为一个控件来理解吧,有人这么比喻:“.net是一辆汽车,datawindow.net就是为这辆汽车,装了一个豪华的轮子!”你认为呢?
ajax的问题,还没有发现冲突的地方,Sybase,MS应该考虑这个问题了,毕竟大公司。
多语言问题,我还没有完成,待续吧。。。
附加一个问题:
【问题描述】
使用webDataWindowControl,在页面上加载了一个Search button,设计的目的是通过search button触发,webDataWindowControl加载data,显示等。但是在分页时出现无法加载数据。
【原因】翻页时,需要重新set transaction,这点我忽略了
【解决办法】每次翻页,设置一次set transaction 加载一个数据,每次page_load,都执行一次,似乎解决了问题,但是这样很浪费资源,其实sybase已经提供了解决的方法,只要如图进行设置即可:
AutoRestoreDataCache:
Automatically restore the data cache during page postback.
AutoSaveDataCacheAfterRetrieve:
Automatically save the data as cache after retrieve finishes sucdessfully.
ok,天下太平了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/12/1880756.aspx
贴出来问题图形
Pic-001
pic-002
在tabpage中,通过单击pic-001的某一行,转到另外的tabpage,显示detail information,思索,待续。。。
经过研究,准备使用ICallbackEventHandler的客户端回调事件。
--------------------------------------------------------------------------------
ICallbackEventHandler可以说是ajax的关键技术,现在可以使用vs2.0的接口,来实现ajax的效果。
refer to:http://www.cnblogs.com/soso/archive/2006/06/08/420687.html
六步使用ICallbackEventHandler实现无刷新回调
AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架,使得开
发效率和可维护性大大降低。其实ASP.NET2.0中,已经提供了这样的接口,这就是ICallbackEventHandler。
关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。
ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。
第一步,在VS2005中建立一个新的WEB窗件。
第二步,在ASPX中,放上一段HTML代码(如下):
1<body>
2 <form id="form1" runat="server">
3 <div>
4 <button onclick="CallServer()">CallServer</button>
5 </div>
6 </form>
7</body>
第三步,然后在<HEAD></HEAD>中放入一段JavaScript脚本:
1 <script type="text/javascript">
2 function CallServer()
3 {
4 var product = "测试";
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6 }
7
8 function ReceiveServerData(rValue)
9 {
10 alert(rValue);
11 }
12 </script>
第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:
ICallbackEventHandler.GetCallbackResult()
和
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
第五步,增加一个变量CallBackValue,并修改接口的两个方法为:
1 private string CallBackValue = string.Empty;
2
3 string ICallbackEventHandler.GetCallbackResult()
4 {
5 return CallBackValue + ",ok";
6 }
7
8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台C#代码将字符串
加上“,OK”后返回给客户端的JavaScript代码,并显示。
以上六步,就可以实现无刷新回调了。现在,我们来分析一下几段代码。
先看第三步中的JavaScript代码,其中的CallServer()方法中进行了回调,回调的语句为:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
里面四个参数中第二个参数指定将product这个JavaScript中的字符串变量传回后台,第三个参数指定了从后
台返回时接收返回信息的JavaScript方法ReceiveServerData(string Value)。
第五步中后台的两个方法,一个ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用来
接收前台JavaScript中传来的字符串变量,并赋值给内部变量this.CallBackValue,另一个方法
ICallbackEventHandler.GetCallbackResult()将变更后的内部变量this.CallBackValue返回给前台JavaScript方
法ReceiveServerData(string Value)。
调用的顺序是: (前台)CallServer() --> (后台)ICallbackEventHandler.RaiseCallbackEvent(string
eventArgument) --> (后台)ICallbackEventHandler.GetCallbackResult() --> (前台)ReceiveServerData
(string Value)。
整个调用过程非常简单,而其中非常关键的一步是第三步的
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
完整的测试代码:
aspx:
==============
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ICallbackEventHandler demo</title>
<script type="text/javascript">
function CallServer()
{
var product="hello";
<%=ClientScript.GetCallbackEventReference(this,"product","ReceiveServerData",null) %>;
}
function ReceiveServerData(rValue)
{
alert(rValue);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="CallServer" onclick="CallServer()" />
</div>
</form>
</body>
</html>
cs:
============
using System;
using System.Data;
using System.Configuration;
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;
public partial class _Default : System.Web.UI.Page , ICallbackEventHandler
{
private string CallBackValue = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
}
#region ICallbackEventHandler 成员
string ICallbackEventHandler.GetCallbackResult()
{
//throw new Exception("The method or operation is not implemented.");
return CallBackValue + ", i am server";
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
//throw new Exception("The method or operation is not implemented.");
this.CallBackValue = eventArgument;
}
#endregion
}
对各参数,更深入的研究:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/12/1880805.aspx
先给大家一个参考学习的连接
http://objectsharp.com/cs/blogs/dave/category/86.aspx
http://www.sybase.com/products/development/datawindownet
download evaluation:
I.DataWindow .NET v2.5 Evaluation Edition(DataWindow .NET v2.5评估版)官方下载
http://www.sybase.com/detail?id=1053922暂时没有找到破解补丁。
II.
http://www.componentsource.com/products/sybase-datawindow-net/index.html(datawindow.net 2.5)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/13/1882159.aspx
本文中使用了Datawindow.net2.5:
datawindow.net在vs2.5中,保存数据,很像pb,使用UpdateData就可以了,对于使用过pb的人来说,还是非常方便的。
UpdateData(true,true);
同时export各种format的文件,也是非常方便的
dw.SaveAs(@"c:\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", Sybase.DataWindow.FileSaveAsType.Excel, false);
dw.SaveAs(@"c:\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf", Sybase.DataWindow.FileSaveAsType.Pdf, false);
dw.SaveAs(@"c:\image" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".doc", Sybase.DataWindow.FileSaveAsType.Doc, false);
dw.SaveAs(@"c:\image" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".html", Sybase.DataWindow.FileSaveAsType.Html, false);
这里,仅仅列举四种格式,具体可以查看Sybase.DataWindow.FileSaveAsType,确实挺方便;
但是,出现另外一个问题,一度困扰着我,就是数据库字符集的问题,由于多种原因,我的数据库字符选择,如图示:
在database里,使用select是看不到中文的,只是看到,类似乱码的latin编码,当然你的database如果使用简体中文字符集,那么完全不必理会我这一部分的内容,因为对你没有用处了。
不过还是有解决方法的,只有进行两次转换即可:呈现数据时,保存数据时;
protected void dw_RowRetrieved(object sender, Sybase.DataWindow.RowRetrievedEventArgs e)
{
int rowNum = e.RowNumber;
int colNum = dw.ColumnCount;
for (int i = 1; i <= colNum; i++)
{
string colName = dw.Describe("#" + i + ".Name");
string dwStrTemp = dw.GetItemString(rowNum, Convert.ToInt16(i));
dw.SetItemString(rowNum, Convert.ToInt16(i), ParseString(dwStrTemp));
}
}
--------------------------------------------------------------------------------
int rowCount = dw.RowCount;
int colCount = dw.ColumnCount;
for(int i=1;i<=rowCount;i++)
{
for (int j = 1; j <= colCount; j++)
{
string colValue = dw.GetItemString(i, Convert.ToInt16(j));
string colValueDB = ParseSql(colValue);
dw.SetItemString(i, Convert.ToInt16(j), colValueDB);
}
}
dw.UpdateData(true, true);
上面提到的ParseString, ParseSql:
1252--english,950--繁体中文,936--简体中文
static public int databaseCharset = 1252;
static public int displayCharset = 950;
static public string ParseString(string str)
{
byte[] b = Encoding.GetEncoding(databaseCharset).GetBytes(str);
return Encoding.GetEncoding(displayCharset).GetString(b);
}
static public string ParseSql(string str)
{
byte[] b = Encoding.GetEncoding(displayCharset).GetBytes(str);
return Encoding.GetEncoding(databaseCharset).GetString(b);
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/19/1893282.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/05/1867932.aspx