标签归档:c#

c#对sqlserver中uniqueidentifier类型数据的as string 值为空白的问题

从数据库取数据我们习惯用以下代码:

string title = rows[0]["title"] as string;

当取的数据是uniqueidentifier类型,如id,则我们得到的数据就会为空白,可用如下方法解决:

string id = rows[0]["id"].ToString();

这个问题困扰了我近半小时,我也一直坚信uniqueidentifier是另外一种类型的string,但好像其遵循一定的规律,如果不符合这个规律也会报错,所以我不太喜欢使用它来作为ID,但困于旧代码的限制,目前只好这样做

swfupload和asp.net接合需要注意的问题

如果直接运行官方所给的示例是能够成功运行的。但如果想运行在“无dll”文件的环境里面还需要注意以下几点:

1、页面session和flash session是不相同的,所以在操作的时候还要把Global.asax里面的内容放到工程下。因为这个示例是将上传的图片存放到内存中的,所以每次都要从session中取信息,如果不在request开始前进行操作,页面跟flash取到的是两个不同的会话,这就会成就图片上传成功,但看不到上传的内容。

void Application_BeginRequest(object sender, EventArgs e)
    {
        /* Fix for the Flash Player Cookie bug in Non-IE browsers.
         * Since Flash Player always sends the IE cookies even in FireFox
         * we have to bypass the cookies by sending the values as part of the POST or GET
         * and overwrite the cookies with the passed in values.
         *
         * The theory is that at this point (BeginRequest) the cookies have not been read by
         * the Session and Authentication logic and if we update the cookies here we’ll get our
         * Session and Authentication restored correctly
         */

        try
        {
            string session_param_name = "ASPSESSID";
            string session_cookie_name = "ASP.NET_SESSIONID";

            if (HttpContext.Current.Request.Form[session_param_name] != null)
            {
                UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);
            }
            else if (HttpContext.Current.Request.QueryString[session_param_name] != null)
            {
                UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);
            }
        }
        catch (Exception)
        {
            Response.StatusCode = 500;
            Response.Write("Error Initializing Session");
        }

        try
        {
            string auth_param_name = "AUTHID";
            string auth_cookie_name = FormsAuthentication.FormsCookieName;

            if (HttpContext.Current.Request.Form[auth_param_name] != null)
            {
                UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);
            }
            else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)
            {
                UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);
            }

        }
        catch (Exception)
        {
            Response.StatusCode = 500;
            Response.Write("Error Initializing Forms Authentication");
        }
    }
    void UpdateCookie(string cookie_name, string cookie_value)
    {
        HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
        if (cookie == null)
        {
            cookie = new HttpCookie(cookie_name);
            HttpContext.Current.Request.Cookies.Add(cookie);
        }
        cookie.Value = cookie_value;
        HttpContext.Current.Request.Cookies.Set(cookie);
    }

当然,另外还需要通过ASPSESSID参数将sessionid传递给服务端

post_params : {
    "ASPSESSID" : "<%=Session.SessionID %>"
},

2、如果将Thumbnail.cs的内容改成Thumbnail.txt然后分别引入到upload.aspx和thumbnail.aspx中,也会造成问题,因为两个页面对应是并不是同一个类,所以会造成转换失败同样取不到所上传的图片。解决方法可以是将upload.aspx和thumbnail.aspx两个页面的内容合并,也可以是使用App_Code。

3、将文件保存目录中,通过Directory.Exists来判断目录是否存在,通过Directory.CreateDirectory来创建目录

HttpPostedFile file_upload = Request.Files["Filedata"];

display_file_name = file_upload.FileName;
file_size = file_upload.ContentLength;

string dir = DateTime.Now.ToString("yyyyMMdd");
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff");

string serverpath = Server.MapPath("file/") + dir + "/";
if (!Directory.Exists(serverpath))
{
    DirectoryInfo dirinfo = Directory.CreateDirectory(serverpath);
}
string ext = file_upload.FileName.Substring(file_upload.FileName.LastIndexOf("."));
physical_file_name = filename + ext;
physical_file_path = serverpath + filename + ext;
file_upload.SaveAs(physical_file_path);

4、在用input file模拟时,还要记得在form的提交方式

<form id="form1" action="upload.aspx" method="post" enctype="multipart/form-data">

5、补充一下html头部的信息写法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="author" content="tohours.com" />
        <title>后台管理登录</title>
    </head>
<body>
</body>
</html>

如何在aspx文件中自定义类,自定义方法

一直知道jsp是如下的定义方法:

<%!
public string f(){
retrun “hello”;
}
%>

用“aspx 定义方法” “aspx 定义类”来搜索一直不得要领,突然间看见了<script>我才愰然,竟然不是前台脚本,竟然就是定义方法和变量的地方,我搜索了这么久只能说苍天啊,大地啊……

<%@ Page language=”c#”%>
<%
System.Web.HttpContext context = this.Context;
int i = 1;
context.Response.Write(i + a() + Test.hello());
%>
<script runat=”server”>
public string a()
{
return “hello”;
}
public class Test
{
public static string hello()
{
return “static, hello”;
}
}
</script>

一定要找到这些的原因是现在一些旧项目,原来的代码与开发环境都找不到,唯一能看到的就是页面了。而php或者jsp都有保存文本代码的能力,于是我想aspx也有这个能力,功夫不负有心人,这样我又可以只用notepad来写.net程序了,爽啊

当然还要再配上include,这样就可以单独定义公共方法了

<!– #include file=”head.aspx” –>