近日,本人开发了信息上报系统,期间属于二把刀,遇到许多问题不知如何是好,最终还是摸着石头过河,有的靠开发delphi程序的经验蒙,有的靠"强大的意识流"~~~(狂鄙视,这句是我那个倒霉师侄最爱吹嘘他自己星际水平高的一句了)实际是靠web浏览大家的文章.终于按时开发完成了. 在此对好好在互联网上无私提供信息的版主表示赞赏!! 对不懂装懂胡写乱写,抄袭别人的版主表示强烈鄙视!按张博的话讲,真该给b一个大boliu! 好了 言归正传,下面把我遇到的十来个问题给大家共享一下,希望大家批评指正:
(1): 服务器上如果客户端没有安装frameworks,则不能运行
MessageBox.Show("您没有输入填报人 填报时间 文档号 企业名称,请填写这些内容");
可以将其改为: Response.Write("<script language='JavaScript'> alert('您没有输入填报人 填报时间 文档号 企业名称,请填写这些内容');</script>");
(2):提交数据到access不能成功,报:操作必须使用一个可更新的查询 此种情况是access数据库的访问权限问题,解决办法: 远程桌面上去,到数据库的文件夹,右键点击该文件夹,增加该文件夹对everyone的读写权限.
(3):出现了oracle的dataaccess 同时存在于@@ 和@@的错误,通过查找web,web都提示是aspx页有引用同一个cs文件造成的,查看一遍,发现没有,又有人说是webconfing里面设置问题,发现 <assemblies> <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="Oracle.DataAccess, Version=10.1.0.400, Culture=neutral, PublicKeyToken=89B483F429C47342"/> </assemblies> 这几句,并且version肯定是低的,将这几句移除,一切正常.
(4).开发.net程序datagrid gridview 动态添加数据集参数 连接A标签.
datagrid:
<asp:TemplateColumn HeaderText="短信催办"> <ItemTemplate> <a target=_blank href='sm.aspx?id=<%# DataBinder.Eval(Container.DataItem,"短信")%>'<>短信催办</a> </ItemTemplate>
gridview:
<asp:TemplateField><ItemTemplate> <a href='../comnapp/ShowDoc.aspx?type=1&id=<%# DataBinder.Eval(Container.DataItem,"flow_id")%>&pname=<%# Server.UrlEncode(DataBinder.Eval(Container.DataItem,"上报人").ToString())%>&cname=<%# Server.UrlEncode(DataBinder.Eval(Container.DataItem,"上报公司").ToString())%> '<>查看</a></ItemTemplate></asp:TemplateField>
然后在这个控件的PageIndexChanged事件里增加:
this.ImageDataGrid.CurrentPageIndex = e.NewPageIndex;
DataBind();
(5) 传递中文参数问题:
<asp:TemplateField><ItemTemplate>
<a href='../comnapp/ShowDoc.aspx?type=1&id=<%# DataBinder.Eval(Container.DataItem,"flow_id")%>&pname=<%# Server.UrlEncode(DataBinder.Eval(Container.DataItem,"上报人").ToString())%>&cname=<%# Server.UrlEncode(DataBinder.Eval(Container.DataItem,"上报公司").ToString())%> '<>查看</a></ItemTemplate></asp:TemplateField>
发送方必须用<%# Server.UrlEncode(DataBinder.Eval(Container.DataItem,"上报人").ToString())%>
接收方必须用: tman.Value = Server.UrlDecode(Request.QueryString["pname"]);
(6) 至于clob的问题,并不是像某些论坛说的那样,必须用stream 和byte[],因为我们只是存字符串,因而存的时候: OracleParameter paramrem = new OracleParameter("rem", OracleDbType.Clob); paramrem.Value = tx2.Text;//tx2是一个textarea <asp:TextBox ID="tx2" runat="server" Height="133px" TextMode="MultiLine"></asp:TextBox> paramrem.Direction = ParameterDirection.Input; cmd.Parameters.Add(paramrem);
而取的时候: tx1.Text = odr.GetOracleString(2).ToString();
tx2.Text = odr.GetOracleString(3).ToString(); 即可,并不需要什么odr.getoracleclob(2);
(7) 不要惊奇于单击按钮结果会重走一遍page_load, 加上 if (Page.IsPostBack) return; 限制即可;
(8) 开发时可先做demo,然后将html拷贝到aspx文件(当然,第一句保留),c#要访问的控件可以右键改为 作为服务器端控件即可,别忘了在这个html的body后包上<form runat="server"></form>
(9)dropdlist的SelectedIndexChanged事件可以当作delphi的dblc控件的onclick事件,但是要 这个dropdownlist控件 启用autoposback;
(10)前台用的多选人的列表,可以用CheckBoxList捆绑sqlsource实现, 其值可以进行for循环成一个string: //生成传到后台处理的负责办理人员的字符串 protected string asemblyuser() { int i;
string s = "";
for (i = 0; i <= cb1.Items.Count - 1; i++)
{ if (cb1.Items[i].Selected) {
if (s == "") s += cb1.Items[i].Value;
else s += "," + cb1.Items[i].Value; } }
return s;
最后后台处理: 后台需要建立:
CREATE OR REPLACE TYPE y_nt_number is table of NUMBER;
create or replace function f_in_number(p_in varchar2) return y_nt_number deterministic is p_out y_nt_number; i binary_integer := 0; pt_old binary_integer := 0;begin if p_in is null then p_out := y_nt_number(null); goto returnout; end if; p_out := y_nt_number(0); for pt in 1 .. (length(p_in)) loop if substr(p_in, pt, 1) != ',' then goto endloop; end if; if (i <> 0) then p_out.extend; end if; i := i + 1; p_out(i) := to_number(substrb(p_in, pt_old + 1, pt - pt_old - 1), '9999999999'); pt_old := pt; <<endloop>> null; end loop; if (i = 0) then p_out(i + 1) := to_number(substrb(p_in, pt_old + 1, length(p_in) - pt_old), '9999999999'); else p_out.extend; p_out(i + 1) := to_number(substrb(p_in, pt_old + 1, length(p_in) - pt_old), '9999999999'); end if; <<returnout>> return p_out;end;
具体应用实例: 参数: inlist in varchar2,
for i in (select * from table(cast(f_in_number(inlist) as y_nt_number))) loop insert into info_relation_t (info_id, user_id, sts) values (inid, i.column_value, 'A'); end loop;
(11)梅花雨控件很好用,但要用utf8格式保存的版本才行,否则会报错;
(12)弹出窗口显示提示信息可以用如下写法: Page.RegisterStartupScript("mydialog", "<script language='javascript'>alert('用户名或密码不正确!')</script>");