zoukankan      html  css  js  c++  java
  • 初学c# -- 学习笔记(9) 关于SQL2008

    在做一个局域网的类似网盘的学习练习,服务端差不多了,在改bug。用vlc的dll做的全格式视频、音频预览在线播放下载等等。

    在做服务端也遇到了一些问题,走了好多弯路。

    开始把上传的视频、音频、图像、文件等已二进制存放到数据库里,播放二进制流,做成了,结果。。数据库那个慢啊,最后放本地硬盘了。

    在服务端数据库文件记录管理批量处理上又学了一些,主要靠存储过程来批量处理记录:

    建立2个函数

    USE [Transmis]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER function [dbo].[Get_StrArrayLength]
    (
      @str varchar(1024),
      @split varchar(10) 
    )
    returns int
    as
    begin
      declare @location int
      declare @start int
      declare @length int
      set @str=ltrim(rtrim(@str))
      set @location=charindex(@split,@str)
      set @length=1
      while @location<>0
      begin
        set @start=@location+1
        set @location=charindex(@split,@str,@start)
        set @length=@length+1
      end
      return @length
    end
    USE [Transmis]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER function [dbo].[Get_StrArrayStrOfIndex]
    (
      @str varchar(1024),  
      @split varchar(10),  
      @index int 
    )
    returns varchar(1024)
    as
    begin
      declare @location int
      declare @start int
      declare @next int
      declare @seed int
      set @str=ltrim(rtrim(@str))
      set @start=1
      set @next=1
      set @seed=len(@split)
      set @location=charindex(@split,@str)
      while @location<>0 and @index>@next
      begin
        set @start=@location+@seed
        set @location=charindex(@split,@str,@start)
        set @next=@next+1
      end
      if @location =0 select @location =len(@str)+1 
      return substring(@str,@start,@location-@start)
    end


    再写存储过程

    USE [Transmis]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Files_Delete]  
    @s_id varchar(1024)
    as
    declare @next int  
    set @next=1
    while @next<=dbo.Get_StrArrayLength(@s_id,'$')
    begin
      DELETE FROM Trans_File WHERE id = dbo.Get_StrArrayStrOfIndex(@s_id,'$',@next)
      set @next=@next+1
    end

    在C#里面传递参数调用就可以批量删除了

    if (form6.DialogResult == DialogResult.OK)
                    {
                        for (int i = 0; i < das_cont.Rows.Count; i++)
                        {
                            if (conter_Panel.Controls[i].Tag.ToString() != "Normal")
                            {
                                del_id += conter_Panel.Controls[i].Tag.ToString() + "$";
                                string extname = Path.GetExtension(conter_Panel.Controls[i].Name);
    
                                if (String.Compare(extname, ".mp3", true) == 0) //删除强制的mp3音频文件
                                {
                                    dirpath = @"audio";
                                }
                                else //删除强制的mp4视频文件
                                if (String.Compare(extname, ".mp4", true) == 0)
                                {
                                    dirpath = @"video";
                                }
                                else。。。。。。。。。。。。。。。。。。。
    ........................................................................
    .......................................................................
    File.Delete(del_path); /* try { File.Delete(del_path); } catch { } */ } } if (del_id != "") { SqlCommand com = new SqlCommand(); com.Connection = Conn; com.CommandType = CommandType.StoredProcedure; com.CommandText = "Files_Delete"; com.Parameters.Add("@s_id", SqlDbType.VarChar, 8000); com.Parameters[0].Value = del_id; com.ExecuteNonQuery(); AddFiles("id"); }


    就是把文件名生成字符串用符号隔开,传递到存储过程。

    挺好用,修改一下,批量插入更新等批量操作都可以了。

    这个学习练习用64位写的,改32位有问题了,在处理下。

  • 相关阅读:
    dirname basename 截取路径中的目录以及文件名
    Singleton 单例模板
    人生最后一个10年-白银时代
    自动填充英文字母序列
    关于最近使用文档的几个技巧
    关于最近使用文档的几个技巧
    The King of Excel Geek 0.1版本
    Tkinter 学习
    test
    检测电话号码的python程序(一)
  • 原文地址:https://www.cnblogs.com/qiaoke/p/6265619.html
Copyright © 2011-2022 走看看