C50108
  • 2019/0801/轉職成功路途開始
  • 自學心得與此網站使用方式
  • 行事曆&課程大綱
  • 2019/0224/自我檢視
  • 雜記
    • 2019/0103/雜記
    • 2019/0410/作品集建構
    • 2019/0429/職訓局書單
    • 2019/0317/自我檢視
    • 2019/0316/陪玄松去高車討論&環境圖流程圖大神們line討論
    • 2019/0305/Gitbook使用方法
  • 2018/10XX/轉職心路歷程
  • 職訓局里程碑
    • 201901
      • 2019/0103/行動商務系統設計與開發,職訓局報到
      • 2019/0104/正式開課日&行動商務課程簡介
      • 2019/0108/資料庫理論/Access&WEB開發簡介
      • 2019/0109/資料庫資料型態屬性&HTMLtag
      • 2019/0110/計概基礎概念
      • 2019/0111/HTML表格table&form表單_post/get&iframe
      • 2019/0114/計&網概概念&網路層概念
      • 2019/0115/資料庫Access運算值&CSS簡介&在職班補充
      • 2019/0116/Access比較/邏輯運算&CSS_在職班補充+選擇器+Box model
      • 2019/0117/資訊系統架構&網路層
      • 2019/0118/資料庫正規化
      • 2019/0121/計概IT分工&資料庫正規化
      • 2019/0122/網路層&CSS父子容器切版
      • 2019/0123/Access資料庫關聯&CSS position&偵錯
      • 2019/0124/C#宣告、指定運算子
      • 2019/0125/VM虛擬機_基礎介紹
      • 2019/0128/VM虛擬機架設_虛擬網卡設定&伺服器權限設置
      • 2019/0129/Wireshark查詢網路層&資料庫物件導向
      • 2019/0130/ERmod雞爪圖&C#if、for時間複雜度
      • 2019/0131/C#流程控制&變數型別
    • 201902
      • 2019/0201/系統分析與設計_資料庫ERmod&c#Homework
      • 2019/0211/ASP.NET_Webforms&物件命名空間
      • 2019/0212/定址&網路遮罩
      • 2019/0213/SQLSeverM.S.介紹&AspWebforms表單控制項
      • 2019/0214/網概乙太網路&網路安全
      • 2019/0215/Pre Javascript 基礎 & 在職班補充
      • 2019/0218/TSQL基本指令&ASP.net左右置換表格/驗證傳值
      • 2019/0219/Javascript終極密碼&musicplay&asp.net驗證器
      • 2019/0220/SS基本語法&網概line機器人
      • 2019/0221/前端Javascript musicplay、內聚力耦合率
      • 2019/0222/前端Javascript musicplay、內聚力耦合率&伺服器權限
      • 2019/0223/SqlServerHomework&第一次專案報告
      • 2019/0225/SS合併查詢&ASP.NET驗證器
      • 2019/0226/伺服器ntfs安全性權限/共用權限
      • 2019/0227/Javascript_music_play_end&ASP.net串聯SQL(datasource就是拿來串SQLServer的)
    • 201903
      • 2019/0304/SS集合運算/子查詢/exists&asp.net GridView 事件 OnRowDataBound
      • 2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁
      • 2019/0306/Javascript musicplay_really_end
      • 2019/0307/前端HTML5鑲嵌字型&伺服器網域概念
      • 2019/0308/Android Studio_基礎概念&開發環境建置
      • 2019/0311/胡中興 工業4.0講習
      • 2019/0312/安卓系統_開發基礎介紹
      • 2019/0313/安卓工作室_基礎/布局內元件
      • 2019/0314/Asp.net鏈結資料庫-查詢
      • 2019/0315/SQS DML&第二次專案報告
      • 2019/0318/SQL DDL & 伺服器 自學基礎
      • 2019/0319/Android Studio_布局內元件&佈局規劃元件
      • 2019/0320/SQL檢視表&tsql基礎&Asp.net_Gridview
      • 2019/0321/TSQL&TDM&ASP.NET_Datalist
      • 2019/0322/DOM&JQ基礎&系統分析設計PPT&在職班補充
      • 2019/0325/TMD&Asp.net上傳圖片/產生QRCode
      • 2019/0326/SQLServer_預存程序+函數&Asp.net_Webforms半自動鏈結資料庫與自動化更新
      • 2019/0327/安卓工作室_佈局規劃元件
      • 2019/0328/jQuery選擇器應用&Ajax導讀+應用&asp.net串sserver_註冊帳號功能
      • 2019/0329/ADDS伺服器架設&第三次專題報告
    • 201904
      • 2019/0401/SQL觸發程序&Asp.net自動寄信&認證信
      • 2019/0402/前端作業四-jQ應用轉換樣式&ASP.NET_FormView控制項-會員資料維護實例
      • 2019/0403/JQ事件動畫&股市&Usecase
      • 2019/0408/安卓工作室_元件/布局基本end
      • 2019/0409/安卓工作室-物件導向事件驅動實作+Homework1&2
      • 2019/0410/上午小組討論-作品集自習&Visual studio webform+MVC範本
      • 2019/0411/安卓工作室-UI觸發委派函式與控制物件
      • 2019/0412/JQ動畫實做(寶可夢遊戲開場)&第四次專題報告
      • 2019/0415/前端JQ-Ajax+JSON&後端ADO建置、主板頁面概念控制項、Bootstrap演示
      • 2019/0416/安卓工作室UI控件案例結束、IDE Eclipse_Java物件導向基礎
      • 2019/0417/伺服器網域ADDNS&416LINE討論
      • 2019/0418/SQL指標、索引&Use cace
      • 2019/0419/主頁、Webform ADO.NET Entity Fromwork 增刪修實作&第五次專題報告
      • 2019/0423/Java基礎(型別/溢位/自動強制型別轉換/鑄造物件/串流/)&I/O物件用法(底層/較不底層)
      • 2019/0424/Bootstrap_RWD基礎/應用&Asp.Net_MVC實作增刪修(修待補)
      • 2019/0425/伺服器IIS安裝&資料匯入與管理
      • 2019/0426/Asp.Net_MVC增刪修實作(補修)&bootstrap – gridsystem– 網格系統&第六次專題報告&全國技能競賽網頁設計
      • 2019/0429/物件導向技術原理方法實作
      • 2019/0430/資料庫設計應用效能調教_SQL all end&ASP.NET_MVC_Controller單元_純C無V無M操作/簡單複雜繫結
    • 201905
      • 2019/0501/內部網站辨識&外部DNS域名/IP+自架DNS伺服器理解
      • 2019/0502/Java語言基礎、物件導向基礎
      • 2019/0503/Asp.net泛型處理常式驗證圖片應用&第七次專題報告Usecase
      • 2017/0506/Bs_FlexBox&Asp.Net_MVC_View+Razor@+Viewbag+helper
      • 2019/0507/Java 物件導向_類別+函式觀念&階段性作業三
      • 2019/0508/Asp.Net_MVC_Model_ADO.NET+Entityframework+LoginMember實作+MVC觀念
      • 2019/0509/Java物件導向(函式)_儲存型態+回傳值+多載+自制+例外處理+this參照+存取+複合
      • 20919/0510/第八次專題報告=功能DEMO
      • 2019/0514/Java_靜態類別+繼承特性
      • 2019/0515/RWD Utility+Card&MVC ViewModel+CRUD(RD)
      • 2019/0516/BS form&驗證+JQ驗證 & MVC_CRUD(CU)
      • 2019/0517/ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用
      • 2019/0520/繼承&存取權特性+java作業四+字符串格式化+多形+抽象類別
      • 2019/0521/抽象類別+介面
      • 2019/0522/Bootstrap Components 元件介紹 + MVC API 概念&實作
      • 2019/0523/IIS IP限制&ASP.NET部屬
      • 2019/0524/WebApi異質程式連線方式&第九次專題報告_循序圖
      • 2019/0528/Bootstrap Components 元件介紹 + MVC 登入驗證 + 商品加入購物車 實作
      • 2019/0529/ASP.NET_MVC購物車訂單功能完成+BootstrapComponents元件介紹
      • 2019/0530/原本是伺服器的課,但拿來做專題。
      • 2019/0531/ASP.NET_WebformAllView物件功能清單&ListView實作&第十次專案報告(完整循序圖)
    • 201906
      • 2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證
      • 2019/0604/ASP.NET_MVC Part2 PhotoSharing Controller & Filter & ADO.NET & View@RAZOR Helper
      • 2019/0605/Java介面實作&結束+安卓工作室(整合Layout與Java)Intent意圖&Bundle包裹
      • 2019/0606/第十一次專案報告功能demo+SingnaIR+伺服器作業+端午歌唱比賽
      • 2019/0609/黃大神傳授Visual_Studio&除錯技巧
      • 2019/0610/番外篇 Web Socket 即時連線& 就業前準備與技巧
      • 2019/0611/安卓工作室_(意圖+隱含意圖)資料傳遞+Android生命週期+硬體裝置與應用
      • 2019/0612/WebSockets Notification + MVC Part2 PhotoSharing PartialView & ADO.NET & EntitySQL & VMd
      • 2019/0613/MVC Part2 PhotoSharing ViewModel & ErrorHandle
      • 2019/0614/第十二次專案報告 功能Demo
      • 2019/0618/MVC Part2 PhotoSharing Route & Sitemap & _LayOut & AJAX
      • 2019/0618/RWD在職班_(Javascript_object-oriented programming)
      • 2019/0619/安卓工作室_(硬體裝置與應用)相機操作&GPS+階段性作業6+延伸 ( APP End )
      • 2019/0620/MVC補充C#MS SQL匯入CSV+上傳CSV存入MS SQL
      • 2019/0621/第十三次專案報告 功能Demo
    • 2019/0701/最終專案報告
    • 2019/0702/結訓與家人遊台東預計0708開始找工作自學筆記應該會等工作穩定後繼續開始
  • 自學里程碑
    • 201901
      • 2019/0107/DR
      • 2019/0108/UW
      • 2019/0103/Git
      • 2019/0103/CS
      • 2019/0115/Vscode
      • 2019/0116/JSON&AJAX
      • 2019/0122/卡內基
      • 2019/0126/MBTI
      • 2019/0131/PDP 外在 內在
    • 201902
      • 2019/0217/huli_half Developer
      • 2019/0219/SEO
      • 2019/0219/雪球速讀法
    • 201903
      • 2019/0304/asp、php、jsp、asp.net、net. Framework、asp.net core
      • 2019/0329/網站架站初嘗試
    • 201904
      • 2019/0415/Datatype-Explanation
      • 2019/0416/ASP.NET_Webform&Core&MVC(MVVM/MVP)
    • 201905
      • 2019/0613/開發職訓局共同專案時遇到的問題與解法
      • 2019/0514/ASP.NET SignalR
      • 2019/0514/JS擴展-JQ、React、Vue、Angular...
      • 2019/0514/Sass&Scss
      • 2019/0514/MVC結合Webform
      • 2019/0515/ASP.NET MVC_TempData/ViewData/ViewBag
      • 2019/0522/[自學筆記]海綿體啟蒙??
Powered by GitBook
On this page
  • sqlserver 預存程序 - 續
  • 參數型預存程序
  • 用gridview導出結果
  • 兩個以上參數
  • 修改預存程序 alter
  • 參數給定預設值
  • 新增產品會有個問題 ( 要怎麼做?
  • 傳出參數
  • 內建的預存程序 sp開頭的都是
  • sqlserver函數 function
  • 純量值函數(式) 因為是一段公式
  • 呼叫函數
  • 有參數的函數
  • 資料表值函數
  • 進階資料表值函數應用
  • asp.net qrcode 查詢商品 實例
  • 不使用 sqldatasourse 半自動連接資料庫
  • 將資料鏈結至gridview做顯示
  • 利用adapter時機
  • sqlcommandbuilder 自動物件自動比對 如果有新增就真的新增它
  • 設斷點完進入偵錯模式後也要顯示出預覽畫面才可使用監看式觀察數據
  • 終於要來做qrcode 商品實例了
  • 32 product_search_qr_code 掃描器查詢
  • 偵錯功能修理

Was this helpful?

  1. 職訓局里程碑
  2. 201903

2019/0326/SQLServer_預存程序+函數&Asp.net_Webforms半自動鏈結資料庫與自動化更新

sqlserver 預存程序 - 續

參數型預存程序

重點1. 變數 宣告型態

重點2. from後面只能接表用exec 強制執行

重點3.begin end為一段

create proc table_query
	@tableName nvarchar(20)
as
begin
 exec('select * from '+@tableName)
end 
----------------------
exec table_query '班級'

用gridview導出結果

1.用textbox讓使用者輸入表名稱是不好的,改用下拉式選單

2.取得資料庫所有的table ,

select*from information_schema.tables

where table)type='base table

3.dropdownlist 有分 text 與 value

4.就算是dropdownlist改動也算改變參數所以需要 ControlParameter

5.按下去後要變動顯示表單

OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"

6.sql使用exec 記得要 from 空格 exec('select * from '+@tableName)

<asp:GridView ID="GridView2" runat="server" DataSourceID="SqlDataSource2"></asp:GridView>
<hr />
<asp:SqlDataSource ID="SqlDataSource3" runat="server" 
ConnectionString="<%$ ConnectionStrings:教務系統ConnectionString %>" 
SelectCommand="table_query" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter Name="tableName" ControlID="DropDownList1" Type="String" />
</SelectParameters>
</asp:SqlDataSource>

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:教務系統ConnectionString %>" 
SelectCommand="select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='base table'"
></asp:SqlDataSource>

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource4" DataTextField="TABLE_NAME" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
<asp:GridView ID="GridView3" runat="server" DataSourceID="SqlDataSource3"></asp:GridView>

兩個以上參數

建立預存程序跟 執行預存程序要搞懂 不然執行錯誤就會造成無窮迴圈

有指定參數名稱 不用按照順序也沒關係 不然就要按照順序

--有兩個以上參數的預存程序
create proc 員工薪資查詢
	@name varchar(12), 
	@salary money
as
begin

	select * from 員工
	where 姓名 like '%'+  @name+ '%' and 薪水>=@salary
end

exec 員工薪資查詢 '陳', 20000
exec 員工薪資查詢 @salary=20000,@name='陳'

修改預存程序 alter

參數給定預設值

兩個參數 如果有預設值 若只給1個 也不會抱錯 所以感覺預設值要給模糊查詢萬用字元

--有預設值的參數
alter proc 員工居住地查詢
	@city char(5) ='台北',
	@name varchar(12)
as
begin

	select * from 員工
	where 姓名 like '%'+  @name+ '%' or 城市=@city
end

exec 員工居住地查詢 '桃園 ', '陳'
exec 員工居住地查詢  @name='陳'
exec 員工居住地查詢 default,'陳'

新增產品會有個問題 ( 要怎麼做?

如果是規則性的 則按照 邏輯 產生新的東西

要先寫一段程式確定是否重複

新的 與 現有的比較 如果不存在 則 ... ( 商業邏輯

可以寫在資料庫端 ( tsql 與 資料庫是最緊密的

alter proc check_productID	
	@productID	char(4)
as
begin
declare @pid char(4)
	select @pid=Product_ID from Products where Product_ID=@productID
	if @@rowcount=0
		select '可使用'
	else
		select '編號重複'
end

exec check_productID 'P011'

為何要兩層方式傳遞,避免後台接收到兩筆資料

第一筆為判斷資料 第二筆為判斷後顯示資料

其實可以在前端或後端,判斷後顯示資料

第28asp.net模擬

 <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource4" DataTextField="TABLE_NAME" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
            <asp:GridView ID="GridView3" runat="server" DataSourceID="SqlDataSource3" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true"></asp:GridView>
       <hr />

            產品編號:<asp:TextBox ID="txtPID" runat="server"></asp:TextBox><asp:Button ID="Button2" runat="server" Text="檢查可用性" />
            <asp:GridView ID="GridView4" runat="server" DataSourceID="SqlDataSource5">
               
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource5" runat="server" ConnectionString="<%$ ConnectionStrings:MySystemConnectionString1 %>" 
                SelectCommand="check_productID" SelectCommandType="StoredProcedure">
                <SelectParameters>
                    <asp:ControlParameter Name="productID" ControlID="txtPID" Type="String" />
                </SelectParameters>

            </asp:SqlDataSource>

實務上 gridview datasource 通常用於顯示資料 管理資料 通常不做檢查 且很耗資源

傳出參數

通常預存程序是傳出結果 , 傳入不同的參數得到不同的結果

如果這時需要將預存程序的值往外傳 ( 傳出參數

設置兩個預存程序參數 一個為輸入 一個為輸出

宣告一個變數在預存程序外 用於接收輸出

output 參數 寫法比較怪 是 等號左丟給右邊

可以預存程序呼叫另外一個預存程序 但是巢狀限制為32個

結構化的程式法 內聚力會高

--傳出參數
create proc 薪水查詢
 @name varchar(12),
 @salary money output
as
begin
	select @salary=薪水 from 員工 where 姓名=@name
end


alter proc 加薪試算
	@name varchar(12)
 as
 begin
	declare @MySalary money
	exec 薪水查詢 @name,  @salary=@MySalary output
	print @MySalary*1.03
end


exec 加薪試算 '王心零'

內建的預存程序 sp開頭的都是

alter 只能改內容 不能改物件名稱

所以有個叫 sp_rename 舊名稱 , 新名稱

--內建預存程序
exec sp_rename '課程2','課程3'

exec sp_helptext '加薪試算'
exec sp_columns '課程'

sqlserver函數 function

純量值函數(式) 因為是一段公式

資料表函數(式)

沒有參數的函數

自訂函數名稱通常會 +fn在最前面 不成文的習慣

( ) 內為函數參數

特殊的地方是 需要標註回傳值資料型態

通常要傳出一個值不會用預存程序通常會用函數

--函數(function)
--純量值函數(式)
create function fnGetSalary()
	returns money
as
begin
	declare @salary money
	select @salary=薪水 from 員工
	return @salary
end

會抓到最後一筆 上一筆會被覆蓋

看returns 就會自動辨識是哪種函數

在資料庫寫函數主要是因為能夠跟資料庫做緊密結合

呼叫函數

自訂函數必須把型態寫清楚

--呼叫函數
print getdate()
select getdate()
print dbo.fnGetSalary()
select dbo.fnGetSalary()
go

有參數的函數

tsql 語法通常先寫名稱在寫資料型態

函數裡面只要看到return以下就不會再執行 所以不用寫 else

--有參數的函數
alter function fnGetSalary2
(
@name varchar(12)
)
	returns money
as
begin
	declare @salary money
	select @salary=薪水 from 員工 where 姓名=@name
	if @@ROWCOUNT=0
		return 0

	return @salary
end

函數要用在適合他的地方 預存程序也是

create proc 薪水查詢_fn
	@name varchar(12)
as
begin
	if dbo.fngetsalary2(@name)=0
		print '查無此人'
	else
		print dbo.fngetsalary2(@name)
end

exec 薪水查詢_fn '王心7777零'

資料表值函數

最大差別在於 returns table

--資料表值函數--
create function fnStudentQuery
	(@stuNo char(4))
	returns table
return(
select 班級.教授編號,員工.姓名 as 老師姓名,教授.科系,教授.職稱,班級.學號,學生.姓名,學生.性別, 
班級.課程編號,課程.名稱,課程.學分,班級.上課時間,班級.教室
from 班級 
inner join 學生 on 班級.學號=學生.學號 
inner join 課程 on 班級.課程編號=課程.課程編號
inner join 教授 on 班級.教授編號=教授.教授編號
inner join 員工 on 教授.身份證字號=員工.身份證字號
where 學生.學號=@stuNo
)

呼叫 資料表值函數

select * from dbo.fnStudentQuery('S001')

進階資料表值函數應用

2008後才能用 offset fetch 所以在那之前的版本只能自己寫函數

select e.身份證字號,e.姓名,e.電話
from 員工 as e order by e.身份證字號
offset 3 rows
fetch next 3 rows only

死機碼

唯一識別值 流水號 identity

撈出值在放入 資料表變數中 ( 資料表變數必須寫好型態

create function fnOffset
(@m int, @n int)
returns @resultTable table(
	sn int identity,
	id char(10),
	name varchar(12),
	tel varchar(20)
)
begin
	insert into @resultTable
	select e.身份證字號,e.姓名,e.電話
	from 員工 as e order by e.身份證字號

	delete @resultTable where sn<@m or sn>@n
	
	return
end


select * from dbo.fnOffset(4,6)

asp.net qrcode 查詢商品 實例

ado.net 實務上95%使用這個

sqldataadapter

sqldatadatareader

sqldatasourse 可以做的事情很多 但很多時候實務上並不會用到就會變成佔資源

大部分時間都使用 ado.net

以 qrcode 為例

不使用 sqldatasourse 半自動連接資料庫

<configuration>
  <connectionStrings>
    <add name="教務系統ConnectionString" connectionString="Data Source=127.0.0.1;Initial Catalog=教務系統;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:教務系統ConnectionString %>" 
SelectCommand="學生選課明細" SelectCommandType="StoredProcedure"></asp:SqlDataSource>

以上全自動作對照用

沒有自動連資料庫的物件變半自動

首先using 兩個東西

using System.Data;
using System.Data.SqlClient;

與資料庫連結的物件

 public partial class _30ADOnet_SqlDataAdapter : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySystemConnectionString1"].ConnectionString );
            SqlDataAdapter da = new SqlDataAdapter("select * from products",Conn);

            DataSet ds = new DataSet();
            da.Fill(ds, "products");
        }
    }

在用到 using

using System.Configuration;

組態管理員 ConfigurationManager

取屬性 資料庫位址

才開始使用

sqldataadapter ( 搜尋指令 , 資料庫位址 )

以上並沒有做顯示安排 所以

安排一個資料表變數 做 斷點查詢 做資料庫是否有連成功判斷

將資料鏈結至gridview做顯示

繫節完後要呼叫一次才會真的繫節

      GridView gv = new GridView();
            gv.ID = "test";
            gv.DataSource = ds;
            //gv.AutoGenerateColumns = true;
            gv.DataBind();

            form1.Controls.Add(gv);

利用adapter時機

一次做一些事情的時候使用 (記憶體??

修改dataset裡面資料 並沒有寫回資料庫 而是在佔存記憶體中

所以要確認就必須下斷點去監看是否成功

//修改dataset裡的某筆資料
ds.Tables["products"].Rows[7]["Product_Name"] = "111111Chef Topf薔薇系列不沾鍋 - 28公分炒鍋+28公分";
ds.Tables["products"].Rows[7]["Product_price"] = 123456;

//新增一筆資料進dataset
DataRow dr = ds.Tables["products"].NewRow();
dr[0] = "P011";
dr[1] = "uuuuuuuuu";
dr[2] = "P011.jpg";
dr[3] = 123;
dr[4] = 100;
dr[5] = "sssssss";
dr[6] = 1;

ds.Tables["products"].Rows.Add(dr);

執行完後監看式記憶體改變

沒有變化的資料庫

刪除

  //刪除DataSet裡的資料
            ds.Tables["products"].Rows[5].Delete();


            //gv.DataBind();

            //form1.Controls.Add(gv);

sqlcommandbuilder 自動物件自動比對 如果有新增就真的新增它

成本大但可以減少output&input disk kam

sqlcommandbuilder 物件 自動比對 如果有新增就真的新增它

da.update(ds,products)

常態性 新增修改刪除 很有可能會發生例外 因為sql那邊錯誤 c#=例外

建議丟到try

發生例外放在 catch (exception ex )

response.write("沒有成功,原因"+ex.message);

try
            {
                SqlCommandBuilder myUpdate = new SqlCommandBuilder(da);
                da.Update(ds, "products");
            }
            catch(Exception ex)
            {
                Response.Write("沒有成功,原因"+ex.Message);
            }

設斷點完進入偵錯模式後也要顯示出預覽畫面才可使用監看式觀察數據

sqldatadatareader 物件 只能讀東西出來 無法下指令所以要透過

sqlcommand 可以做新增修改刪除

要將連線打開 資料庫位址.open()

要記得把連線關起來 資料庫位址.close () ( 不關起來就會被一直佔住 除非time out

執行這個方法 讀取資料 因為有很多筆所以要執行迴圈顯示 不然只會顯示最後一筆

while 條件下 每次一讀取就顯示一次

相較於adapter依次讀取近來

datareader則是一筆一筆讀近來顯示完就關掉了所以節省記憶體但是會損耗 pisk i/o

終於要來做qrcode 商品實例了

用29 做 產生qr code

按鈕 取得 現在所有產品的 qr code

事件功能寫在 on click 裡面

記得 using

讀取的 connection

讀取的 command

使用 datareader 讀一筆資料產生一筆qrcode 產生

看 p001 -p010 有沒有被讀出來

每一筆qrcode 就產生一個 img 控制像 用於顯示

後端物件與前端物件最大差異就在於

如果前端已經有那個物件 則在後端使用id

如果沒有是後端鑄造的則用鑄造時的名稱

前端

 <asp:Button ID="Button1" runat="server" Text="取得商品QR-Code" OnClick="Button1_Click" />

後端

protected void Button1_Click(object sender, EventArgs e)
        {



            QRCodeEncoder encoder = new QRCodeEncoder();
            encoder.QRCodeVersion = 3;
            encoder.QRCodeScale = 10;
            string ProductID = "";

            SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySystemConnectionString1"].ConnectionString);
            SqlCommand Cmd = new SqlCommand("select product_id from products", Conn);

            SqlDataReader rd;
            Conn.Open();
            rd = Cmd.ExecuteReader();
            while (rd.Read())
            {
                ProductID = rd["product_id"].ToString();
                Bitmap img = encoder.Encode(ProductID);

                img.Save(Server.MapPath("/QR_Code/"+ ProductID + ".jpg"), ImageFormat.Jpeg);

                System.Web.UI.WebControls.Image image = new System.Web.UI.WebControls.Image();
                image.ImageUrl = "/QR_Code/"+ ProductID+".jpg";
                form1.Controls.Add(image);

            }

            Conn.Close();
        }

如果是自動更新物件錯誤 1.可能是資料表無pk無法查詢2.資料庫程式開啟資料表造成更新過但沒重新整理看步道

32 product_search_qr_code 掃描器查詢

後端:讓游標一開始就停在框裡面直接使用掃描器

藉由掃描器裡面的程式辨識qrcode產生值按下按鈕進行驗證

前端

<div>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" />
            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:MySystemConnectionString1 %>" 
                SelectCommand="SELECT * FROM [Products] where Product_ID=@Product_ID">
                <SelectParameters>
                    <asp:ControlParameter Name="Product_ID" ControlID="TextBox1" Type="String" />
                </SelectParameters>

            </asp:SqlDataSource>
            <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"></asp:GridView>
        </div>

後端

    protected void Page_Load(object sender, EventArgs e)
        {
            TextBox1.Focus();
        }

rs232 才能寫程式進掃描機 可以掃一為跟二為所以才會貴還可以縮小範圍放大

偵錯功能修理

Previous2019/0325/TMD&Asp.net上傳圖片/產生QRCodeNext2019/0327/安卓工作室_佈局規劃元件

Last updated 6 years ago

Was this helpful?