我想点击一个button按钮后弹出系统对话框的窗口,选择文件(文件是excel的,顺便问一下怎么固定系统文件选择的文件类型),选好后就上传到服务器上。应该怎么做? 谢谢

解决方案 »

  1.   

    参考如下:
    1.                this.openFileDialog1.Filter = "excel文件(*.xls)|*.xls";
    =========================================================================
    2.             if (listView1.SelectedItems.Count > 0)
                {
                    ds.Tables["wg"].Clear();
                    da = new SqlDataAdapter("select * from bg_wjgl where wjbh  ='" + listView1.SelectedItems[0].SubItems[1].Text.Trim() + "'", bg_wlrh.sqlcn);
                    da.Fill(ds, "wg");
                    string filename = Application.StartupPath.Trim() + "\\" + ds.Tables["wg"].Rows[0]["wjmc"].ToString().Trim() + ds.Tables["wg"].Rows[0]["wjetx"].ToString().Trim();
                    //MessageBox.Show(filename);
                    Byte[] byteBLOBData = new Byte[0];
                    byteBLOBData = (Byte[])ds.Tables["wg"].Rows[0]["wjlr"];
                    try
                    {
                        FileStream fs = new FileStream(filename, FileMode.OpenOrCreate);
                        fs.Write(byteBLOBData, 0, byteBLOBData.Length);//写入文件
                        fs.Close();
                        System.Diagnostics.ProcessStartInfo myFun = new System.Diagnostics.ProcessStartInfo(filename);
                        System.Diagnostics.Process fun = System.Diagnostics.Process.Start(myFun);
                        fun.WaitForExit();
                        //------------------------------保存文件-------------------------------------
                        fs = new FileStream(filename, FileMode.Open);
                        byte[] myData = new Byte[fs.Length];
                        fs.Position = 0;
                        fs.Read(myData, 0, Convert.ToInt32(fs.Length));                    //-------------------------------------------------------------------
                        //----------------------------------------------------------
                        bg_wlrh.sqlcn.Open();
                        cmd = new SqlCommand("update bg_wjgl set wjlr=@wjlr where wjbh='" + listView1.SelectedItems[0].SubItems[1].Text.Trim() + "'", bg_wlrh.sqlcn);
                        cmd.Parameters.Add("@wjlr", SqlDbType.Image);
                        cmd.Parameters["@wjlr"].Value = myData;
                        cmd.ExecuteNonQuery();
                        bg_wlrh.sqlcn.Close();
                        fs.Close();
                        //----------------------------------------------------------
                        File.Delete(filename);
                    }
                    catch (Exception ee)
                    {
                        MessageBox.Show(ee.Message);
                    }
                }
      

  2.   

    select * from bg_wjgl where wjbh  ='" + listView1.SelectedItems[0].SubItems[1].Text.Trim() + "'", bg_wlrh.sqlcn
    楼上的 这句代码是什么意思?
    我是想把上传的excel文件导入到数据库中 现在在解决第一步导入的问题
      

  3.   

    //导入文件跟导入图片的原理是一样的,参考类似的帖子:
    http://community.csdn.net/Expert/topic/5476/5476448.xml?temp=.8799097
    //参考这段导入文件到数据库,跟导入图片是一样的。字段类型设为Image
    =====================================================================================
                    this.openFileDialog1.Filter = "Excel文件(.xls)|*.xls";
                    this.openFileDialog1.Multiselect = false;
                    if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        //-------------------------------------------------------------------
                        FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
                        byte[] myData = new Byte[fs.Length];
                        fs.Position = 0;
                        fs.Read(myData, 0, Convert.ToInt32(fs.Length));
                        //-------------------------------------------------------------------                        bg_wlrh.sqlcn.Open();
                            cmd = new SqlCommand("insert into bg_wjgl(wjlr) values (@wjlr)", bg_wlrh.sqlcn);
                            cmd.Parameters.Add("@wjlr", SqlDbType.Image);
                            cmd.Parameters["@wjlr"].Value = myData;
                            cmd.ExecuteNonQuery();
                            bg_wlrh.sqlcn.Close();
                            ClearListView();
                            wjda.Fill(ds, "wj");
                            //CreateListView();
                        fs.Close();//关闭文件
      

  4.   

    km_yu 谢谢你 不过openFileDialog1是个什么控件?
    第一步是弹出系统对话框 我还不知道怎么做 看别人说用type=file
    这样我没有办法在后台写响应事件 所以想用button实现 这样又不知道怎么弹出系统对话框
      

  5.   

    是web下的
    file field的后台响应事件应该怎么写啊?
      

  6.   

    //声明就可以了,或者从工具箱里面拖到表单
    private System.Windows.Forms.OpenFileDialog openFileDialog1;
            private void button1_Click(object sender, EventArgs e)
            {
                //上面那段代码
            }
      

  7.   

    km_yu 我是webform的项目 没有OpenFileDialog这个控件 还是谢谢你!
      

  8.   

    其实这些都可以用JS实现 
    <input type="file" style="display:none;" onchange="return Check();" id="File1"/>
    <input type="button" onclick="OpenMyDialog" value="按钮"/>
    <script language="JavaScript">
    function OpenMyDialog()
    {
        document.getElementById("File1").click();//不知道最后那个括号要不,忘了
    }
    function Check()
    {
        var obj=document.getElementById("File1");
        if(obj.value!="")
        {
            var objExp=obj.value.substring(obj.value.lastIndexOf(".")+1,obj.value.length);        if(objExp.toUpperCase()=="XLS")
            {
                .....
                return true;
            }
            else
            {
                alert("不支持此类型的文件");
                return false;
            }
        }
    }
    </script>
    -----------
    如果你是想点File1弹出的话那么就不要那个Button了,File的style去掉,如果要操作数据库的话把File1后加个属性 runat="Server",上传文件到服务器或者是数据库中什么的我就不多说了,相信网上很多
      

  9.   

    O15013245O(懒得起昵称) 太感谢你了 我要的就是这种效果!
    if(objExp.toUpperCase()=="XLS")
            {
                .....
                return true;
            }
    因为我对JS不是很明白 能告诉我在.....的部分怎么向后台传值吗?