國內最大的酷站演示中心!
1. 使用保持連接的方式編寫程序,計算各年級平均成績,并顯示結果。
【解答】
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace 習題8_6_1
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
}
//添加button按鈕在listbox中顯示結果
private void button1_click(object sender, eventargs e)
{
listbox1.items.add("年級 平均成績");
string connectionstring = properties.settings.default.mydatabaseconnectionstring;
//根據連接字符串創建sqlconnection實例
sqlconnection conn = new sqlconnection(connectionstring);
//創建sqlcommand實例,并設置sql語句和使用的連接實例
sqlcommand cmd = new sqlcommand();
cmd.commandtext = "select substring(學號,1,2) as 年級,avg(成績) as 平均成績 from mytable2 group by substring(學號,1,2)";
cmd.connection = conn;
try
{
conn.open();
sqldatareader r = cmd.executereader();
while (r.read() == true)
{
listbox1.items.add(string.format("{0}級 {1}", r[0], r[1]));
}
r.close();
}
catch (exception err)
{
messagebox.show(err.message, "計算成績失敗");
}
finally
{
conn.close();
}
}
}
}
2. 使用保持連接的方式編寫程序,查詢mytable2中不及格學生的學號,姓名,性別,成績。并將結果在listbox中顯示出來。
【解答】
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace 習題8_6_2
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
}
private void button1_click(object sender, eventargs e)
{
listbox1.items.add(" 學號 姓名 性別 成績");
string connectionstring = properties.settings.default.mydatabaseconnectionstring;
//根據連接字符串創建sqlconnection實例
sqlconnection conn = new sqlconnection(connectionstring);
//創建sqlcommand實例,并設置sql語句和使用的連接實例
sqlcommand cmd = new sqlcommand();
cmd.commandtext =
"select 學號,姓名,性別, 成績 from mytable2 where (成績<60)";
cmd.connection = conn;
try
{
conn.open();
sqldatareader r = cmd.executereader();
while (r.read() == true)
{
listbox1.items.add( string.format("{0} {1} {2} {3}", r[0], r[1], r[2], r[3]));
}
r.close();
}
catch (exception err)
{
messagebox.show(err.message, "查詢成績失敗");
}
finally
{
conn.close();
}
}
}
}
3. 編寫程序,以“[編碼]名稱”的樣式在combobox1中顯示mytable1的內容。
【解答】
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace 習題8_6_3
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
}
private void form1_load(object sender, eventargs e)
{
string connectionstring = properties.settings.default.mydatabaseconnectionstring;
//根據連接字符串創建sqlconnection實例
sqlconnection conn = new sqlconnection(connectionstring);
//創建sqlcommand實例,并設置sql語句和使用的連接實例
sqlcommand cmd = new sqlcommand();
cmd.commandtext = "select * from mytable1";
cmd.connection = conn;
try
{
conn.open();
sqldatareader r = cmd.executereader();
while (r.read() == true)
{
combobox1.items.add(string.format("[{0}] {1}", r[0], r[1]));
}
combobox1.selectedindex = 0;
r.close();
}
catch (exception err)
{
messagebox.show(err.message, "顯示數據失敗");
}
finally
{
conn.close();
}
}
}
}
4. 在畫線處填上合適的內容,使程序變得正確完整。
string connstring="server=localhost;integrated security=sspi;database=pubs";
sqlconnection conn=____________________________
string strsql="select * from mytable2";
sqldataadapter adapter=new sqldataadapter(_____________);
dataset=new dataset();
adapter.fill(________________,"mytable2");
this.datagridview1.datasource=dataset.tables["mytable2"];
【解答】
string connstring="server=localhost;integrated security=sspi;database=pubs";
sqlconnection conn= new sqlconnection(properties.settings.default.mydatabaseconnectionstring);
string strsql="select * from mytable2";
sqldataadapter adapter=new sqldataadapter(conn);
dataset=new dataset();
adapter.fill(dataset,"mytable2");
this.datagridview1.datasource=dataset.tables["mytable2"];
5. 已知數據庫中定義了一張person表,表的數據結構如下:
字段名稱字段類型字段含義
id數字編號
xm文本姓名
xb文本性別
nl數字年齡
zip文本郵政編碼
用編寫代碼的方法在datagridview中顯示該數據表中年齡大于18的所有紀錄,顯示時以編號的升序排序,要求禁止用戶編輯數據。
【解答】
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace 習題8_6_5
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
}
private void button1_click(object sender, eventargs e)
{
string connectionstring = properties.settings.default.mydatabaseconnectionstring ;
sqlconnection conn = new sqlconnection(connectionstring);
try
{
conn.open();
sqldataadapter adapter = new sqldataadapter(
"select id,xm,xb,nl from person where nl > 18 order by id", conn);
dataset dataset = new dataset();
//如果不指定表名,則系統自動生成一個默認的表名
adapter.fill(dataset, "person");
//可以使用索引引用生成的表
datagridview1.datasource = dataset.tables["person"];
adapter.dispose();
}
catch (exception err)
{
messagebox.show(err.message);
}
finally
{
conn.close();
}
}
private void form1_load(object sender, eventargs e)
{
//不允許用戶直接在最下面的行添加新行
datagridview1.allowusertoaddrows = false;
//不允許用戶直接按delete鍵刪除行
datagridview1.allowusertodeleterows = false;
}
}
}
6.例8-18的存儲過程定義中,將“@surname nvarchar(2),”改為“@surname nchar(2),”,是否仍然能夠得到正確結果,為什么?
【解答】
不一定。因為如果傳遞的參數值為“王”,在存儲過程中會自動變為“王 ”。
7. 調用存儲過程,設計程序完成下列功能:任意給出一個漢字,統計mytable2中所有包含該漢字的人數,并顯示統計結果。
【解答】
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace 習題8_6_7
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
}
private void button1_click(object sender, eventargs e)
{
sqlconnection conn =
new sqlconnection(properties.settings.default.mydatabaseconnectionstring);
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
//設置sql語句為存儲過程名,命令類型為存儲過程
cmd.commandtext = "selectfilterstudentsnum";
cmd.commandtype = commandtype.storedprocedure;
//添加存儲過程中參數需要的初始值,注意參數名要和存儲過程定義的參數名相同
if( textbox1.text=="")
{
messagebox.show("請輸入有效信息","錯誤");
textbox1.focus();
return ;
}
cmd.parameters.addwithvalue("@surname", textbox1.text);
cmd.parameters.addwithvalue("@record", 0);
//指定哪些參數需要返回結果
cmd.parameters["@record"].direction = parameterdirection.output;
try
{
conn.open();
//執行存儲過程
cmd.executenonquery();
//顯示返回的結果
messagebox.show(string.format("有{0}條含 {1} 的記錄",
cmd.parameters["@record"].value,textbox1.text));
}
catch (exception err)
{
messagebox.show(err.message);
}
finally
{
conn.close();
}
}
}
}