📄 dataservice.asmx.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace WebForm
{
/// <summary>
/// DataService 的摘要说明。
/// </summary>
public class DataService : System.Web.Services.WebService
{
ADODB._Connection Mysjk=new ADODB.ConnectionClass();
//[ WebMethod(Description="Per session Hit Counter",EnableSession=true)]
public DataService()
{
//CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
string Sjkf = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" + Server.MapPath("lgxysl.mdb") + ";";
Mysjk.Open(Sjkf,null,"lgxyslldw901890",-1);
}
//公用函数
public struct TableList
{
public string Name;
public string Type;
}
private string GetListType(string TableName,string ListName)
{
TableList[] LN=ListNameGet(TableName);
int LNs=LN.GetUpperBound(0);
for(int i=0;i<=LNs;i++)
{
if(LN[i].Name==ListName)
{
return LN[i].Type.ToString();
}
}
return "NotFind";
}
private TableList[] ListNameGet(string TableName)
{
//SqlCommand myCommand = new SqlCommand("SELECT TOP 0 * FROM "+TableName ,Mysjk);
//SqlDataReader MyRe = myCommand.ExecuteReader();
ADODB.Recordset Myre;
object p=null;
Myre=Mysjk.Execute("SELECT * FROM "+TableName,out p,0);
int Rs=Myre.Fields.Count;
TableList[] ReData=new TableList[Rs];
int UB=ReData.GetUpperBound(0);
//根据查询命令字符串成,执行查询,返回结果集
for(int i=0;i<=UB;i++)
{
ReData[i].Name=Myre.Fields[i].Name.ToString();
ReData[i].Type=Myre.Fields[i].Type.ToString();
}
Myre.Close();
return ReData;
}
private string RunSql(string SqlTxt)
{
try
{
string[] ComT=SqlTxt.Split(new char[] {' '});
string ComTxt=ComT[0].ToString();
if (ComTxt!="SELECT")
{
object p=null;
Mysjk.Execute(SqlTxt,out p,0);
return "-1";//操作查询返回"-1"
}
else
{
ADODB.Recordset Myre;
object p=null;
Myre=Mysjk.Execute(SqlTxt,out p,0);
string Res=Myre.Fields[0].Value.ToString();
Myre.Close();
return Res;//选择查询返回首列的第一个数据
}
}
catch(Exception error)
{
return error.Message+"。";//返回错误信息和查询表达式
}
}
private System.Xml.XmlDocument RunReader(string SqlTxt)
{
//执行有返回值的SELECT查询,以XML的方式返回查询结果
//参数为一条SELECT查询命令
//返回值是一个XML文档
try
{
string[] ComT=SqlTxt.Split(new char[] {' '});
string ComTxt=ComT[0].ToString();
if (ComTxt=="SELECT")
{
//检测是否是SELECT查询,如果是
ADODB.Recordset Myre;
object p=null;
Myre=Mysjk.Execute(SqlTxt,out p,0);
//根据查询命令字符串成,执行查询,返回结果集
System.Xml.XmlDocument XmlDoc=new System.Xml.XmlDocument();
string XmlTxt="";
//XmlTxt="<?xml version='1.0' encoding='utf-8'?>";
XmlTxt=XmlTxt+"<Root></Root>";
XmlDoc.LoadXml(XmlTxt);
int Cs=0;
while(!Myre.EOF)
{
Cs++;
System.Xml.XmlNode NewRecord=XmlDoc.CreateNode(System.Xml.XmlNodeType.Element,"Record","");
XmlDoc.DocumentElement.AppendChild(NewRecord);
string Das="";
for(int i=0;i<=Myre.Fields.Count-1;i++)
{
switch (Myre.Fields[i].Type.ToString())
{
case "adDouble"://数字
case "adSingle":
if (Myre.Fields[i].Value.ToString()!="")
{
double DoDas=Double.Parse(Myre.Fields[i].Value.ToString());
//Das=DoDas.ToString("0.00");
Das=DoDas.ToString();
}
else
{
Das="";
}
break;
case "adDBTimeStamp"://日期
if(Myre.Fields[i].Value.ToString()!="")
{
DateTime DT=DateTime.Parse(Myre.Fields[i].Value.ToString());
Das=DT.Year+"年"+DT.Month+"月"+DT.Day+"日";
}
else
{
Das=Myre.Fields[i].Value.ToString();
}
break;
default://文本
Das=Myre.Fields[i].Value.ToString();
break;
}
System.Xml.XmlNode newfield=XmlDoc.CreateNode(System.Xml.XmlNodeType.CDATA,"Field", "");
newfield.Value=Das;
NewRecord.AppendChild(newfield);
}
Myre.MoveNext();
}
if(Cs==0)
{
XmlTxt="<Root><Record><![CDATA[Error,没有查到任何记录。]]></Record></Root>";
XmlDoc.LoadXml(XmlTxt);
return XmlDoc;
}
//历遍结果集,并将它转为XML格式
Myre.Close();
//关闭结果集
//生成XML对象
return XmlDoc;
//返回XML对象
}
else
{
string XmlTxt="<Root><Record><![CDATA[Error,该查询不是可返回值的查询]]></Record></Root>";
System.Xml.XmlDocument XmlDoc=new System.Xml.XmlDocument();
XmlDoc.LoadXml(XmlTxt);
return XmlDoc;
//返回出错信息,在前面加了一个Error以方便识别它
}
}
catch(Exception error)
{
string XmlTxt="<Root><Record><![CDATA[Error,"+error.Message+"。]]></Record></Root>";
System.Xml.XmlDocument XmlDoc=new System.Xml.XmlDocument();
XmlDoc.LoadXml(XmlTxt);
return XmlDoc;
//返回系统错误信息,在前面加了一个Error以方便识别它
}
}
private string SetAdd(bool AutoKey,string DataN,System.Xml.XmlDocument MyXmlDoc)
{
//往一个表中添加一条记录
//DataN:表名
//要添加的数据
try
{
string SqlTxt="";
System.Xml.XmlNode SqlValue=MyXmlDoc.SelectSingleNode("Root/Record");
int Datas=SqlValue.ChildNodes.Count;
SqlTxt="INSERT into "+DataN+" Values(";
int IDMax=0;
if (AutoKey==true)
{
string ID="0";
ID=RunSql("SELECT Count(ID) FROM "+DataN);
if(int.Parse(ID)>0)
{
ID=RunSql("SELECT Max(ID) FROM "+DataN);
int IDInt=int.Parse(ID);
IDMax=IDInt+1;
}
else
{
IDMax=1;
}
SqlTxt=SqlTxt+IDMax+",";
}
TableList[] TableL=ListNameGet(DataN);
string Ltype="";
for(int i=0;i<Datas-1;i++)
{
if(AutoKey==true)
{
Ltype=TableL[i+1].Type;
}
else
{
Ltype=TableL[i].Type;
}
switch (Ltype)
{
case "adVarWChar":
if(SqlValue.ChildNodes[i].InnerText!="null" && SqlValue.ChildNodes[i].InnerText!="")
{
SqlTxt=SqlTxt+"'"+SqlValue.ChildNodes[i].InnerText+"',";
}
else
{
SqlTxt=SqlTxt+"null,";
}
//字符串类型的数据
break;
case "adDouble"://数字
case "adSingle":
case "adInteger":
if(SqlValue.ChildNodes[i].InnerText!="null" && SqlValue.ChildNodes[i].InnerText!="")
{
double DouData=Double.Parse(SqlValue.ChildNodes[i].InnerText);
SqlTxt=SqlTxt+DouData+",";
//SqlTxt=SqlTxt+SqlValue.ChildNodes[i].InnerText;
}
else
{
SqlTxt=SqlTxt+"null,";
}
//数值类型的数据,可能含有百分号
break;
case "adDBTimeStamp"://日期
if (SqlValue.ChildNodes[i].InnerText!="null" && SqlValue.ChildNodes[i].InnerText!="")
{
SqlTxt=SqlTxt+"datevalue('"+SqlValue.ChildNodes[i].InnerText+"'),";
}
else
{
SqlTxt=SqlTxt+"null,";
}
//日期时间类型的数据
break;
default:
SqlTxt=SqlTxt+SqlValue.ChildNodes[i].InnerText+",";
//其他类型的数据
break;
}
}
Ltype=TableL[Datas-1].Type;
switch (Ltype)
{
case "adVarWChar":
if(SqlValue.ChildNodes[Datas-1].InnerText!="null" && SqlValue.ChildNodes[Datas-1].InnerText!="")
{
SqlTxt=SqlTxt+"'"+SqlValue.ChildNodes[Datas-1].InnerText+"')";
}
else
{
SqlTxt=SqlTxt+"null)";
} //字符串类型的数据
break;
case "adDouble"://数字
case "adSingle":
case "adInteger":
if(SqlValue.ChildNodes[Datas-1].InnerText!="null" && SqlValue.ChildNodes[Datas-1].InnerText!="")
{
double DouData=Double.Parse(SqlValue.ChildNodes[Datas-1].InnerText);
SqlTxt=SqlTxt+DouData+")";
//SqlTxt=SqlTxt+SqlValue.ChildNodes[Datas-1].InnerText;
}
else
{
SqlTxt=SqlTxt+"null)";
}
//数值类型的数据,可能含有百分号
break;
case "adDBTimeStamp"://日期
if (SqlValue.ChildNodes[Datas-1].InnerText!="null" && SqlValue.ChildNodes[Datas-1].InnerText!="")
{
SqlTxt=SqlTxt+"datevalue('"+SqlValue.ChildNodes[Datas-1].InnerText+"'))";
}
else
{
SqlTxt=SqlTxt+"null)";
}
//日期时间类型的数据
break;
default:
SqlTxt=SqlTxt+SqlValue.ChildNodes[Datas-1].InnerText+")";
//其他类型的数据
break;
}
//以上生成插入查询命令
string reT=RunSql(SqlTxt);
if(reT=="-1")
{
if (AutoKey==true)
{
return IDMax.ToString();
}
else
{
return reT;
}
}
else
{
return reT;
}
//执和命令
}
catch(Exception error)
{
return error.Message;
}
}
private string SetUpdate(bool TextKey,string DataN,TableList TableH,string OldKey,System.Xml.XmlDocument MyXmlDoc)
{
//功能:更新某个表的一条记录
//DataN:表名
//TableH:字段列表
//OldKey:更新前索引ID值
//MyXmlDoc:新的记录数据
try
{
string SqlTxt="UPDATE "+DataN+" Set ";
System.Xml.XmlNode SqlValue=MyXmlDoc.SelectSingleNode("Root/Record");
//int Datas=SqlValue.ChildNodes.Count;//获得要更新的字段数
string Ltype="";
/**
for(int i=0;i<Datas-1;i++)
{
Ltype=TableH[i].Type;
switch (Ltype)
{
case "adVarWChar":
SqlTxt=SqlTxt+TableH[i].Name+"='"+SqlValue.ChildNodes[i].InnerText+"',";
//字符串类型的数据
break;
case "adDouble"://数字
case "adSingle":
case "adInteger":
if (SqlValue.ChildNodes[i].InnerText!="null" && SqlValue.ChildNodes[i].InnerText!="")
{
double DouData=Double.Parse(SqlValue.ChildNodes[i].InnerText);
SqlTxt=SqlTxt+TableH[i].Name+"="+DouData+",";
}
else
{
SqlTxt=SqlTxt+TableH[i].Name+"=null,";
}
//数值类型的数据
break;
case "adDBTimeStamp"://日期
if(SqlValue.ChildNodes[i].InnerText!="null" && SqlValue.ChildNodes[i].InnerText!="")
{
DateTime DT=DateTime.Parse(SqlValue.ChildNodes[i].InnerText);
SqlTxt=SqlTxt+TableH[i].Name+"='"+DT.ToString()+"',";
}
else
{
SqlTxt=SqlTxt+TableH[i].Name+"=null,";
}
//日期时间类型的数据
break;
default:
SqlTxt=SqlTxt+TableH[i].Name+"="+SqlValue.ChildNodes[i].InnerText+",";
//其他类型的数据
break;
}
}
**/
//Ltype=TableH[Datas-1].Type;
Ltype=TableH.Type;
switch (Ltype)
{
case "adVarWChar":
if(SqlValue.ChildNodes[0].InnerText!="null" && SqlValue.ChildNodes[0].InnerText!="")
{
SqlTxt=SqlTxt+TableH.Name+"='"+SqlValue.ChildNodes[0].InnerText+"' ";
}
else
{
SqlTxt=SqlTxt+TableH.Name+"=Null ";
}
//字符串类型的数据
break;
case "adDouble"://数字
case "adSingle":
case "adInteger":
if (SqlValue.ChildNodes[0].InnerText!="null" && SqlValue.ChildNodes[0].InnerText!="")
{
double DouData=Double.Parse(SqlValue.ChildNodes[0].InnerText);
SqlTxt=SqlTxt+TableH.Name+"="+DouData+" ";
}
else
{
SqlTxt=SqlTxt+TableH.Name+"=null ";
}
//数值类型的数据
break;
case "adDBTimeStamp"://日期
if(SqlValue.ChildNodes[0].InnerText!="null" && SqlValue.ChildNodes[0].InnerText!="")
{
SqlTxt=SqlTxt+TableH.Name+"=DateValue('"+SqlValue.ChildNodes[0].InnerText+"') ";
}
else
{
SqlTxt=SqlTxt+TableH.Name+"=null ";
}
//日期时间类型的数据
break;
default:
SqlTxt=SqlTxt+TableH.Name+"="+SqlValue.ChildNodes[0].InnerText+" ";
//其他类型的数据
break;
}
if(TextKey==false)
{
SqlTxt=SqlTxt+" Where ID="+OldKey;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -