none
SqlDataSource的InsertCommand里直接获取客户端的ip地址,如何操作啊? RRS feed

  • 问题

  • 代码如下:
    InsertCommand="INSERT INTO [V_FTP] ([User_Name], [bm], [ip]) VALUES (@User_Name, @bm,ip)"

    values的ip如何获取,有没有内置的函数啊?以前都是在cs文件里写代码太麻烦了

    2011年10月7日 6:05

答案

  • 我是用DetailsView插入数据的,好像时间是可以用getdate()获取当前的时间的,那么ip有没有类似的函数呢,期待您的回答,不胜感激!


    SQL语句没有直接取得Client端IP的,只能透过写C#代码的方式

    以您这个情况而言

    大致上的做法

     

    1.  InsertCommand="INSERT INTO [V_FTP] ([User_Name], [bm], [ip]) VALUES (@User_Name, @bm,@IP)"

    2.   <InsertParameters> 多追加一个
               <asp:Parameter Name="IP" Type="String" />

           </InsertParameters>

    3.然後在SqlDataSource1的Inserting事件取得Client端IP後,寫給IP參數

     

        protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
        {
            e.Command.Parameters["@IP"].Value = this.getIp();
        }
    
        private  string getIp()//取得IP
        {
    
            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)//有設定proxy
                return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new string[] { "," },StringSplitOptions.None)[0];
            else
                return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    
        }
    

     

     


    Shadowと愉快なコード達

    2011年10月7日 15:44

全部回复

  • 我是用DetailsView插入数据的,好像时间是可以用getdate()获取当前的时间的,那么ip有没有类似的函数呢,期待您的回答,不胜感激!
    2011年10月7日 6:32
  • 我是用DetailsView插入数据的,好像时间是可以用getdate()获取当前的时间的,那么ip有没有类似的函数呢,期待您的回答,不胜感激!


    如果你是WebForm:

    private string GetClientIP()
    {
    string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (null == result || result == String.Empty)
    {
    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

    if (null == result || result == String.Empty)
    {
    result = HttpContext.Current.Request.UserHostAddress;
    }
    return result;
    }


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月7日 7:09
  • 我是用DetailsView插入数据的,好像时间是可以用getdate()获取当前的时间的,那么ip有没有类似的函数呢,期待您的回答,不胜感激!


    SQL语句没有直接取得Client端IP的,只能透过写C#代码的方式

    以您这个情况而言

    大致上的做法

     

    1.  InsertCommand="INSERT INTO [V_FTP] ([User_Name], [bm], [ip]) VALUES (@User_Name, @bm,@IP)"

    2.   <InsertParameters> 多追加一个
               <asp:Parameter Name="IP" Type="String" />

           </InsertParameters>

    3.然後在SqlDataSource1的Inserting事件取得Client端IP後,寫給IP參數

     

        protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
        {
            e.Command.Parameters["@IP"].Value = this.getIp();
        }
    
        private  string getIp()//取得IP
        {
    
            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)//有設定proxy
                return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new string[] { "," },StringSplitOptions.None)[0];
            else
                return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    
        }
    

     

     


    Shadowと愉快なコード達

    2011年10月7日 15:44
  • 不妨參考這篇文章:

    Get client IP address

    http://weblogs.sqlteam.com/peterl/archive/2010/03/20/Get-client-IP-address.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年10月7日 15:53
  • 不妨參考這篇文章:

     

    Get client IP address

     

    http://weblogs.sqlteam.com/peterl/archive/2010/03/20/Get-client-IP-address.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    這該留意一下

    因為是透過ASP.net存取數據庫,所以可能取到的IP Address都是Web Server的IP


    Shadowと愉快なコード達

    2011年10月7日 19:24
  • 感謝Shadow兄的提醒,他所說的狀況的確需要留意。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年10月8日 0:14