欧美日韩一区二区三区四区不卡,日韩欧美视频一区二区三区四区,久久精品欧美一区二区三区不卡,国产精品久久久乱弄

咨詢電話:186 7916 6165 咨詢電話:186 7916 6165 (微信同號)    在線QQ:181796286
NEWS BLOG ·
學無止境
關注開優網絡 關注前沿
ASP.NET QQ登錄接口
ASP.NET Web 開發之靜態頁

ASP.NET Web 開發之SQL語句

發表日期:2015-09-29    文章編輯:南昌開優網絡    瀏覽次數:4928    標簽:ASP.NET應用,SQL使用

ExecuteScalar 返回結果集中第一行的第一列 常用于查詢
例:object obj = db.ExecuteScalar(dbCommand);
if (obj == null || obj.ToString() == "")
{
return "";
}
return DateTime.Parse(obj.ToString()).ToString("yyyy-MM-dd HH:mm");

ExecuteReader 返回SqlDataReader對象 常用于實體類的綁定
ExecuteDataSet 返回DataSet數據表
ExecuteNonQuery 執行sql語句返回操作影響的行數

一、分頁存儲過程SQL2005以上版本
-- =============================================
-- Author:開優網絡
-- Create date: 2009-07-22 12:41
-- Description:分頁,用到了ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_SplitPage]
@tblName   varchar(255),       -- 表名
@strFields varchar(1000) = '*', -- 需要返回的列,默認*
@strOrder varchar(255)='',      -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默認ASC
@PageSize   int = 10,          -- 頁尺寸,默認10
@PageIndex int = 1,           -- 頁碼,默認1
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL   varchar(5000)

if @strWhere !=''
set @strWhere=' where '+@strWhere

set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strFields+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)

exec (@strSQL)

二、分頁存儲過程SQL2000
/****** Object:  StoredProcedure [dbo].[proc_SplitPage]    Script Date: 05/13/2011 14:17:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[proc_SplitPage]
 
 @tblName varchar(255),   -- 表名 
 @strFields varchar(255),   -- 顯示字段名 
 @strOrder varchar(255),  -- 排序字段名 
 @strOrderType varchar(50),   -- 設置排序類型, asc || desc
 @PageSize int = 10,   -- 頁尺寸 
 @PageIndex int = 1,   -- 頁碼 
 @strWhere varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where) 
AS 
 declare @strSQL varchar(6000)  -- 主語句 
 declare @strTmp varchar(100)   -- 臨時變量 
 declare @strOrderTemp varchar(400)  -- 排序類型 
if @strOrderType = 'desc' 
 begin 
  set @strTmp = '<(select min' 
  set @strOrderTemp = ' order by [' + @strOrder +'] desc' 
 end 
else 
 begin 
  set @strTmp = '>(select max' 
  set @strOrderTemp = ' order by [' + @strOrder +'] asc' 
 end 
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strFields + ' from [' 
 + @tblName + '] where [' + @strOrder + ']' + @strTmp + '([' 
 + @strOrder + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
 + @strOrder + '] from [' + @tblName + ']' + @strOrderTemp + ') as tblTmp)' 
 + @strOrderTemp 
if @strWhere != '' 
 set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strFields + ' from [' 
 + @tblName + '] where [' + @strOrder + ']' + @strTmp + '([' 
 + @strOrder + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
 + @strOrder + '] from [' + @tblName + '] where ' + @strWhere + ' ' 
 + @strOrderTemp + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderTemp 
if @PageIndex = 1 
 begin 
  set @strTmp = '' 
  if @strWhere != '' 
  set @strTmp = ' where ' + @strWhere 
  set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strFields + ' from [' 
  + @tblName + ']' + @strTmp + ' ' + @strOrderTemp 
 end 
exec (@strSQL) 
GO

不采用存儲過程分頁方法
public DataSet GetList(string fileds, string order, string ordertype, int PageSize, int PageIndex, string strWhere)
{
// select top 每頁顯示的記錄數 * from topic where id not in (select top (當前的頁數-1)×每頁顯示的記錄數 id from topic order by id desc)  order by id desc  
string sql = Xiaobin.Shop.Utility.Tool.Get_FenYeSQL("shop_news", fileds, order, ordertype, PageSize, PageIndex, strWhere);
       Database db = DatabaseFactory.CreateDatabase();
       DbCommand dbCommand = db.GetSqlStringCommand(sql);
       return db.ExecuteDataSet(dbCommand);
 }


三、上一件和下一件存儲過程采用row()函數,適用于SQL2005
create procedure proc_PrevOrNextPro
@proid int,--商品id
@str nvarchar(20) --取的上一件或下一件,如果是prev是上一件,next下一件
as
begin
declare @rowid int 
select @rowid=rowid from(
select ROW_NUMBER() over (order by createdate desc)as rowid,* from shop_product)as a where a.id=@proid
if @str='prev'
set @rowid=@rowid-1
else
set @rowid=@rowid+1
select * from (
select ROW_NUMBER() over (order by createdate desc)as rowid,* from shop_product)as a where a.rowid=@rowid
end

cs中上一件
Model.Prodect m_prev=new DAL.ProductDAL().GetPrevNextProModel(model.id,"prev")
if(m_prev!=null)
{
hlprev.NavigateUrl="pro.aspx?id="+model.id
}
else
{
hlprev.visible=false;
}
下一件
Model.Prodect m_prev=new DAL.ProductDAL().GetPrevNextProModel(model.id,"next")
if(m_prev!=null)
{
hlnext.NavigateUrl="pro.aspx?id="+model.id
}
else
{
hlnext.visible=false;
}
在DAL層中ProductDAL.cs中加上獲取上一件或下一件的方法
public Xiaobin.Shop.Model.Product GetPrevNextProModel(int proid, string str)
{
string proc = "proc_PrevOrNextPro";
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand(proc);
db.AddInParameter(dbCommand, "proid", DbType.Int32, proid);
db.AddInParameter(dbCommand,"str",DbType.String,str);
Xiaobin.Shop.Model.Product model = null;
using (IDataReader dataReader = db.ExecuteReader(dbCommand))
{
if (dataReader.Read())
{
model = ReaderBind(dataReader);
}
}
return model;
}


第二種方法:
上一件 ExecuteScalar
int m_prev = new DAL.ProplDAL().GetPrevPro(x);
if (m_prev != 0)
{
hyPrve.NavigateUrl = "pro.aspx?id=" + m_prev;
}
else
{
hyPrve.Visible = false;
}
DAL層
public int GetPrevPro(int proid)
{
string sql = "select top 1 id from shop_product where (id <" + proid + ") order by id desc";
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand(sql);
object obj = db.ExecuteScalar(dbCommand);
if (obj == null)
{
return 0;
}
return int.Parse(obj.ToString());
}


下一件 ExecuteScalar
int m_next = new DAL.ProplDAL().GetNextPro(x);
if (m_next != 0)
{
hyNext.NavigateUrl = "pro.aspx?id=" + m_next;
}
else
{
hyNext.Visible = false;
}
DAL層
public int GetNextPro(int proid)
{
string sql = "select top 1 id from shop_product where (id >" + proid + ") order by id asc";
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand(sql);
object obj = db.ExecuteScalar(dbCommand);
if (obj == null)
{
return 0;
}
return int.Parse(obj.ToString());
}

三、常用的SQL
(1) 數據記錄篩選
sql="select * from 數據表 where 字段名=字段值 order by 字段名 desc"
sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 desc"
sql="select top 10 * from 數據表 where 字段名 order by 字段名 desc"
sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"  //只讀取
sql="select * from 數據表 where 字段名 between 值1 and 值2"//限制范圍

(2) 更新數據記錄:
sql="update 數據表 set 字段名=字段值 where 條件表達式"
sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"

(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表"  (將數據表所有記錄刪除)
DROP TABLE 數據表名稱 (永久性刪除一個數據表)
truncate table 表名 //清空數據表 id從1開始 mssql
ALTER TABLE cms_quanxian ALTER id COUNTER (1, 1)  //清空數據表 id從1開始  asccess

(4) 添加數據記錄:
sql="insert into 數據表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目標數據表 select * from 源數據表"  (把源數據表的記錄添加到目標數據表)

(5) 數據記錄統計函數
AVG(字段名) 得出一個表格欄平均值
COUNT(字段名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數據欄的值相加
GROUP BY(分組) 常用于和以上五種統計函數使用
SELECT ROUND(column_name,decimals) FROM table_name  //ROUND 四舍五入 ( 字段名,小數位)
引用以上函數的方法:
select sum(字段名) as 別名 from 數據表 where 條件表達式

例:
獲取評分 
select AVG(pj) from shop_propl where proid=@proid
銷售排行 
select top " + p + " proid,sum(quantity)as 銷售量 from shop_orderdetails group by proid order by 銷售量 desc

更新訂單狀態
update shop_order set state=@state where id=@id

獲取購物總金額 
select sum(sendmoney + detailsmoney) from shop_order where state=5 and isdel=0 and username=@username

登錄 用戶名和密碼、郵箱和密碼 即通過用戶名和密碼獲取實體類或用郵箱和密碼獲取實體類
select count(1) from shop_admin where username=@username and password=@password 

添加積分
update shop_user set interge=interge+@jf where username=@username

更新用戶類型
update shop_user set type=@type where username=@username 

獲取發貼量最大的一天 
select top 1 COUNT(1)as num from bbs_topic group by REPLACE(CONVERT(char(10),createdate,111),'/','-') order by num desc

按日期搜索
replace(CONVERT(char(10),createdate,111),'/','-')<='" + DateTime.Now.ToString("yyyy-MM-dd") + "'

獲取最后登錄的時間 
select top 1 createdate from bbs_log where username=@username and remark='登錄' order by createdate desc

group by 分組查詢用戶發貼排行
select top 10 username,count(username)as num from bbs_topic group by username order by num desc
select top 10 username,(select count(1) from bbs_topic where username=u.username)as num from bbs_user u order by num desc
select top 10 caname,id,bh,(select count(1) from bbs_topic where cabh=c.bh)as num from bbs_category c where len(bh)=4 order by num desc

今天和昨天登錄的人數記錄
//今日  litToday.Text = ldao.CalcCount("replace(CONVERT(char(10),createdate,111),'/','-') = '" + DateTime.Now.ToString("yyyy-MM-dd") + "'").ToString();
//昨日  litYestoday.Text = ldao.CalcCount("replace(CONVERT(char(10),createdate,111),'/','-') = '" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "'").ToString();
總訪客人數:
litTotal.Text=ldao.CalcCount("").ToString();

臨時插入自增列
SET IDENTITY_INSERT [dbo].[czrl_category] ON SET IDENTITY_INSERT [dbo].[czrl_category]
OFF

查找表中的重復行//where子查詢,having為查詢結果的分組操作
select * from tb_producttype where protname in(select protname from tb_producttype group by protname having count(*)>1)  

通過where子查詢獲取最大的id 內層的查詢結果作為外層查詢的比較條件
select * from goods where id=(select max(id) from goods);

對通過from子查詢 內層的查詢結果供外層再次查詢,要加上" as 別名 " u代表外層的查詢表,num代表別名
select top 10 username,(select count(1) from bbs_topic where username=u.username)as num from bbs_user u order by num desc

exists子查詢,把外層查詢結果代入到內層,看內層是否成立
select * from category where exists(select * from goods where good.pid=cagegory.id);

左連接查詢 關系表 left join 左連接 right join 右連接  inner join 內連接即去掉左/右連接中不匹配的數據,只取相同的
select goods_id,goods.cat_id,cat_name,goods_name,shop_price from goods left join category on goods.cat_id=category.cat_id;

注:left join 連接表,on 連接條件 "goods left join category on goods.cat_id=category.cat_id" 查詢出的就是一張完整的關系表。
goods.cat_id表示goods表中的cat_id字段 cat_name表示category表中的字段

distinct方法獲取唯一不同的值
select distinct modulename FROM qx_qx;

mssql按時間查詢
select * from orders where replace(CONVERT(char(10),riqi,111),'/','-') like '2008-09%'
replace(CONVERT(char(10),createdate,111),'/','-')<='" + DateTime.Now.ToString("yyyy-MM-dd")+ "'

獲取類似的10數據 
select top 10 title from bbs_topic where like '%a%'

生成訂單編號 
public string GetOrderBH()
        {
            string sql = "select max(orderbh) from shop_order where orderbh like '" + DateTime.Now.ToString("yyyyMMdd") + "%'";
            Database db = DatabaseFactory.CreateDatabase();
            object obj = db.ExecuteScalar(CommandType.Text, sql);
            if (obj != null && obj != DBNull.Value)
            {
                string tmp = obj.ToString().Substring(8);
                return DateTime.Now.ToString("yyyyMMdd") + (int.Parse(tmp) + 1).ToString("D5");
            }
            else
            {
                //當天沒有訂單
                return DateTime.Now.ToString("yyyyMMdd") + "00001";
            }
        }

通過pid生成bh
public string GetBH(string pid)
{
string sql = "select max(bh) from bbs_category where pid=@pid";
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand(sql);
db.AddInParameter(dbCommand, "pid", DbType.Int32, pid);
object bh = db.ExecuteScalar(dbCommand);
if (bh == null || bh.ToString() == "")
{
if (pid == "0")
{
return "01";
}
else
{
return GetModel(int.Parse(pid)).bh + "01";
}
}
else
{
string tmp = bh.ToString();
string front = tmp.Substring(0, tmp.Length - 2);
string last = tmp.Substring(tmp.Length - 2);
return front + (int.Parse(last) + 1).ToString("D2");
}
}

上傳數據庫
sql2008 → 任務 → 生成腳本 → 選擇要生成的數據庫 → 下一步 → 為服務器的編寫腳本和服務器SQL版本一樣 → 架構限定對象名稱 → false → 下一步 → 全選 → 存儲過程 → 表 → 下一步 → 將腳本保存到新建查詢窗口 → 完成 → 系統會生成一些查詢腳本 → 斷開連接 → 連接到遠程服務器 → 刪除第一句USE[xiaobinshop] → 驗證一下 → 命令成功后 → 執行 → 成功 → 在遠程數據上導入數據 → 源數據庫 → 本機中的xiaobinshop 源10.0 → 下一步→選擇目標 → 遠程數據 → 用戶名\密碼  → 數據庫存 → 遠程數據 → 復制一個或多個視圖的數據 → 所有表 → 編輯映射:啟用標識插入 →  如果有原來相同的表或存儲過程再勾選刪除現有目標表的行 → 目標架構名稱 → 遠程數據的名稱 → 修改web.config文件

網站發布到獨立的服務器
附件  →  遠程桌面連接  →  服務器
創建iis  →  ip為服務器的ip 端口為80  →  主機頭 → 域名 → 讀取 → 運行腳本 → 在文件夾上 → 屬性 → 安全 → 添加 NETWORK_SERICE 和來賓帳號 → IUSR_INOP → 應用 
再到域名中解析一下 → ip為服務器ip
安裝 FileZilla Server → user → Add → 文件夾名稱 → <none> → OK → 開啟Enable accout 和 password → shared folder → Add → 找到文件夾 → 開啟 → Read、Write、Delete、Append 、Create 、Delete 、List  +subirs → ok
在本地從FTP上傳到服務器上,上傳網站再配置數據庫 

本機上部置網站、花生殼
下載花生殼 → 注冊 → 下載花生殼動態域名正式版
注冊后會有一個免費的域名 → 免費域名 → 域名管理
把網站發布到本地的IIS上,端口為80
打開windows防火墻的80端口

子目錄網站的發布
1、打開Web.config中的異常處理on
2、發布網站
3、上傳FTP 除ASP.NET 、bin文件夾和Globl.asax和Web.config文件
4、把bin文件夾中的dll上傳到網站根目錄中的bin中,
5、整合web.config  Globl.asax 和error.html文件
    web.config修改
        //添加子目錄
<appSettings>
<add key="bbsroot" value="/bbs/"/>
</appSettings>
    //添加數據庫連接

<add name="BBSConnStr" connectionString="server=.\sqlexpress;uid=sa;pwd=123456;database=xiaobinbbs;" providerName="System.Data.SqlClient"/>
6、上傳數據庫
7、測試、采用母版頁的文件 MasterPageFile="~/TopDown.Master"改為:"TopDown.Master"
由于根目錄下有網站,web.config的默認連接數據庫的字符串和本項目不一致
那么就要在DAL中的所有類中的
Database db=DatabaseFactory.CreateDatabase("BBSConStr");

    


用SQL語句來查詢表結構
-- 選擇water數據庫下的所有表
use [water] SELECT name FROM sysobjects WHERE xtype = 'U' Or xtype = 'S';

-- 選擇water數據庫下的所有用戶表
use [water] SELECT name FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0 order by name;

-- 查詢water數據庫下的admin表的字段名,長度,類型,字段說明
use [water] SELECT a.[name] as '字段名',a.length '長度',c.[name] '類型',e.value as '字段說明' FROM syscolumns  a left   join    systypes    b   on      a.xusertype=b.xusertype left join systypes on  a.xtype = c.xusertype inner   join   sysobjects  d   on      a.id=d.id     and   d.xtype='U' left join sys.extended_properties e on a.id = e.major_id and a.colid = e.minor_id and e.name='MS_Description'where d.name='admin' 

查詢某張表的字段信息
select * from information_schema.columns where table_name ='colocal'

查詢數據表中結構返回:字段名、字段說明、類型、默認值
SELECT a.[name] as '字段名',c.[name] '類型',e.value as '字段說明',sm.text as '默認值' FROM syscolumns  a  
left   join    systypes    b   on      a.xusertype=b.xusertype
left join systypes on  a.xtype = c.xusertype
inner   join   sysobjects  d   on      a.id=d.id     and   d.xtype='U' 
left join syscomments sm on a.cdefault=sm.id
left join sys.extended_properties e on a.id = e.major_id and a.colid = e.minor_id and 
e.name='MS_Description' where d.name='dsajw_user'

更改表的架構名的SQL語句
ALTER SCHEMA 新架構 TRANSFER 舊架構.對象名稱 

選擇access中的所有的表
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (Left$([Name],4) <> "Msys") AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name;

工具→選項→視圖,勾選系統對象,把 MSysObjects顯示出來,再工具→安全→用戶與組權限,給管理員加上MSysObjects對象的所有權限

MSSQL創建表
create table news(
id int primary key identity(1,1),
createdate datetime not null default getdate(),
title nvarchar(100),
body ntext
visitnum int not null default 0
);

MySql創建表
create table news(
id int not null primary key auto_increment,
createdate TimeStamp not null default current_timestamp
title varcahr(100),
body text,
visitnum int not null default 0
);

SQLite 創建表
create table test (
   id  integer PRIMARY KEY autoincrement,                -- 設置主鍵 
   createdate   datetime default (datetime('now', 'localtime')),    -- 時間 current_timestamp .ToString("s");
   title varchar(50),
   body text,
   visitnum integer default 0,
   type varchar(50)
);















主站蜘蛛池模板: 抚州市| 轮台县| 临猗县| 呼玛县| 新晃| 岳阳市| 蓬安县| 大荔县| 广宗县| 平果县| 德兴市| 德令哈市| 建水县| 山东省| 延寿县| 都兰县| 保康县| 马山县| 孝感市| 施秉县| 榆中县| 武宣县| 望谟县| 中西区| 涪陵区| 安徽省| 柘荣县| 禄丰县| 汶上县| 双桥区| 灵川县| 始兴县| 江陵县| 吐鲁番市| 大新县| 乐业县| 象山县| 镇康县| 克什克腾旗| 珲春市| 新郑市|