整理了"培练营"课程中同学们的提问和老师的精彩解答(四)

ntwuhaohao 2008-10-25 01:22:54
加精
学员:陆英
.net开发环境是需要windows xp2和iis、vs2005,我本机上已经按照老师讲的这样装好了,我想问一下,如果在本机上开发好了一个.net的web程序,我把它放到windos2003的服务器上,是否也需要安装vs2005?另外需要其他设置吗?
回答人:amandag(高歌 .NET学习顾问)
我把它放到windows2003的服务器上,是否也需要安装vs2005?另外需要其他设置吗?
==
服务器上只要有.NET Framework CLR环境的支持即可,当然默认情况下IIS应该已经安装了,在web服务扩展中允许 asp.net 2.0 .....,无须安装VS2005
学员:徐豫锋提问时间:2008-10-12 21:15:14
/// <summary>
/// 清空所有的文本框
/// </summary>
private void ClearTextBox()
{
foreach (Control ctl in form1.Controls)
{
TextBox txt = ctl as TextBox;
if (txt != null)
txt.Text = "";
}
}
如何可以判断ctl是不是TextBox,还有别的写法吗?总感觉这个方法不是很直观。。。。
回答人:amandag(高歌 .NET学习顾问)
我试了一下
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}
在winform下没有问题可以成功运行,如果你是web应用程序,需要改为
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Form.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}
回答人:polarstar (.NET学习顾问)
1。MSDN对as关键字的解释:
as 操作符的作用就像强制转换,所不同的是,当转换失败时,它返回null。
也就是当ctl不是TextBox时,TextBox txt = ctl as TextBox;执行后,ctl为null。
2。上面代码还可以这样写
foreach (Control ctl in form1.Controls)
{
if (ctl.GetType() == typeof(TextBox))
{
TextBox txt = (TextBox)ctl;//这句也可以写成:TextBox txt = ctl as TextBox;
txt.Text = "text";
}
}
学员:ntwuhaohao提问时间:2008-10-13 13:41:10
1.在投票系统:对某明星进行投票,点上传之后,数据提交不到数据库里,设置断点,发现int starid = e.Item.ItemIndex;接收不到数据。不知哪里出错。
整体代码如下
protected void datalist1_update(object sender, DataListCommandEventArgs e)
{
int starid = e.Item.ItemIndex;
SqlConnection strconn = dbmange.getconn();
strconn.Open();
SqlCommand cmd = new SqlCommand("voteroom", strconn);
cmd.CommandType = CommandType.StoredProcedure;
......................
......................
......................
......................
}
2.投票页里有三个linkbutton控件,都设了CommandName属性,但并没有发面哪里调用它,设它有什么作用?
3。投票页里点了投票,相应的投票项就出来了,这是怎么实现的?
4。每次我提交的作业里面没有.sln文件,老师是怎么运行调试的,我如果这个项目文件夹拷到其它机子上,没有.sln文件,怎么调试啊?
回答人:polarstar (.NET学习顾问)回答时间:2008-10-14 02:14:44
1.int starid = e.Item.ItemIndex;所得到的是正在编辑的DataList元素的索引,不正确,应该是int starid = datalist1.DataKeys(e.Item.ItemIndex),得到正在编辑数据的标识,即数据库中用来表示记录唯一性的那个字段值,因为把DataList的DataKeyField设成了starid,所以可以得到这个starid。
2。在DataList中,命令Update、Delete、Cancel和Edit是固定的命令,他们会激活UpdateCommand、DeleteCommand、CancelCommand和EditCommand事件(GridView也有类似的行为,但有一点点区别),所以当你点击设置了CommandName的LinkButton后,就自动调用对应事件函数。你把CommandName="Update"改成
CommandName="Update1"它就不起作用了。
3。你点了“投票”后,相当于是点击了一个CommandName为Edit的LinkButton,如2所述,它会激发EditCommand事件函数,在这个事件函数中有datalist1.EditItemIndex = e.Item.ItemIndex,这就是设置DataList的这个数据为编辑状态,而我们在DataList中设置了<EditItemTemplate>……</EditItemTemplate>模板,当状态为“编辑”状态是,就会显示这个模板,所以投票项就出来了。
4. 打开网站可以用两个方式打开:
1。文件->打开->项目/解决方案,这里选择sln文件,可以打开网站项目。
2。如果没有sln,可以使用:文件->打开->网站,在弹出的对话框中,可以打开远程站点、IIS站点、文件系统等等,这里选择的对象是文件夹。当打开相应的文件夹网站后,编译运行时,如果没有sln,VS就会提示是否创建sln解决方案,这是你还可以选择把sln放在任何一个目录,这样就创建了sln了,下次就可以用它打开。
回答人:潘志红
1. 对于int starid = e.Item.ItemIndex只适用于特定数据库的情况,即正好starinfo表中的starid正好按从0开始顺序增1,如果不是这样,int starid= datalist1.DataKeys(e.Item.ItemIndex)是正确的。因为这个实例不能太大,因此明星库只做了添加,而省略了对明星库的编辑、插入、删除的操作,因此starid是按从零开始递增。
2.在对datalist控件html代码定义时,要有<DataKeyField="starid">,即指定主键。不然可能会出现“int starid = e.Item.ItemIndex; //starid值为0,为什么不管对哪项投票它的值都是0”。
3.在DataList中,命令Update、Delete、Cancel和Edit是固定的命令,他们会激活UpdateCommand、DeleteCommand、CancelCommand和EditCommand事件(GridView也有类似的行为,但有一点点区别),所以当你点击设置了CommandName的LinkButton后,就自动调用对应事件函数。你把CommandName="Update"改成
CommandName="Update1"它就不起作用了。polarstar说法是正确的。
学员:ntwuhaohao
老师经常用这种格式写SQL语句
StringBuilder sql = new StringBuilder();
sql.Append("update T_User set U_name='" + model.U_name + "' and U_pwd='" + model.U_pwd + "'");
sql.Append(" where U_id=" + model.U_id);
我觉得不如用常用的:
string sql=("update T_User set U_name='" + model.U_name + "' and U_pwd='" + model.U_pwd + "' where U_id=" + model.U_id );
不仅简洁明了,少了多次累加操作性能更好??????????
回答人:金旭亮
String类型的数据是只读的,字串每连接一次将导致一次内存的分配工作,大量的字串连接操作(比如在一个很大的循环体内)将导致内存碎块增多,对程序性能有较大影响。
StringBuilder对象在内存中设立缓冲区,只有缓冲区容量不够时才会申请分配内存,因此性能会更好。
但一般情况下,如果字串连接操作只运行几次,String和StringBuilder性能上的差异几乎分不出来。
学员:ntwuhaohao
比如我加了5条记录,删除3条,现在库中还有2条,为什么新加记录从6开始,而不是从3开始 ,已设主键id(1,1)
留言本中留言页用了个编辑器,我调试没问题,一运行出现一堆乱码,提示没有文件
回答人:amandag(高歌 .NET学习顾问)
比如我加了5条记录,删除3条,现在库中还有2条,为什么新加记录从6开始,而不是从3开始 ,忆设主键id(1,1)
==
删除的id后面不会再重复产生,初学者经常问类似这样的问题,其实理由很简单,自增主键的目的只不过是为了保证这个字段是不重复的序列号,而不是为了填补这个空白。
打个比方,如果一个银行卡号被注销,其他用户也不能用这个银行卡号的,否则以前和这张卡号相关的所以记录莫非要现在和你相关?
回答人:polarstar (.NET学习顾问)
1可能是编辑器文件夹放的目录不对;2编辑器缺少某些文件;3某个配置文件编码不对有乱码;
具体要看源代码才能知道,不能解决就发一份代码来看看吧。
主键递增是正常的,在数据库中,主键的作用不是为了起顺序编号的作用,而是唯一标识的作用,它必须“不重复”。
学员:徐豫锋
我在自己的电脑上开发了一个数据库sql2005,如何把他拿下来,安装到其他的电脑上啊?我看了你们的解答,问一下能否写个程序,运行一下就可以把数据库安装到电脑上,许多实际用的软件是有这样的功能的。。。
回答人:polarstar (.NET学习顾问)
分离-附加的方法原来的数据库也要附加回去,而且因为拷贝原来的数据库文件一般比较大。我一般用备份-还原的方法:
1。打开SQL Sever Management,选中你要备份的数据库,右键,选择“任务”->“备份”,在弹出的窗口点击“增加...”输入后缀名为“.bak”的备份文件。
2。把备份好的".bak"文件拷贝到目标机器。
3。在目标机器新建一个同名的数据库,然后选中数据库,右键选择“任务”->“还原”->“数据库”,在弹出的窗口中选择“从设备(From device)”,选择你拷贝过来的.bak文件,从下面还原列表中选择要还原的项,点击左边的“选项”,选中右边的“覆盖现有的数据库(Ovewrite the existing database)”,点击“确定”就可以了。
备份-还原的方法步骤稍微多点,但是它不用对原来数据库进行分离-附加,而且拷贝文件比较小,原来的数据也是存在的。
回答人:amandag(高歌 .NET学习顾问)
方法1.在Sql Server的Manager Studio中分离数据库后copy到另一计算机同样附加即可
方法2.使用Sql Express将数据库放到网站的App_Data目录下,不过这样连接字符串也要做相应更改,好处是无须每次进行分离附加,Copy网站的时候自然就将数据库文件Copy好了。
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SASDMYSKY 2011-12-05
  • 打赏
  • 举报
回复
为什么在vs2008中建的ASP.net中没有e.Itemindex等等。需要加什么头文件么
钱袋 2009-06-06
  • 打赏
  • 举报
回复
IT聪明用电脑高级交流群
{疯狂电脑迷交流平台}
(QQ群46108513)
rion_yi 2008-10-30
  • 打赏
  • 举报
回复
aquariua 2008-10-29
  • 打赏
  • 举报
回复
标记
以后学习
jone33 2008-10-26
  • 打赏
  • 举报
回复
先顶,在看
yhy0611 2008-10-25
  • 打赏
  • 举报
回复
又是WEB

2,089

社区成员

发帖
与我相关
我的任务
社区描述
在线培训学习经验交流分享、优质课程资源共享。
社区管理员
  • IT课程大本营社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧