private string get_Create_DBLinkStr()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("create database link ");
            sb.Append(this._c_linkname.Value);
            sb.Append(" CONNECT TO ");
            sb.Append(this._c_username.Value);
            sb.Append(" IDENTIFIED BY \"");
            sb.Append(this._c_password.Value);
            sb.Append("\" using '");
            sb.Append("(DESCRIPTION=(ADDRESS=(TCP)(HOST=");
            sb.Append(this._ipaddress.Value);
            sb.Append(")(PORT = 1521))");
            sb.Append("(Connect_Data=(");
            sb.Append(this._c_servicename.Value);
            sb.Append(")))';");
            return sb.ToString();
        }
        private bool create_DBLink()
        {
            try
            {
                OracleConnection oc = new OracleConnection(ConfigurationManager.ConnectionStrings["155"].ConnectionString);
                oc.Open();
                //OracleParameter op=new OracleParameter("DBLINK",OracleType.VarChar);
                //op.Value = get_Create_DBLinkStr();
                OracleCommand t_oc = new OracleCommand(get_Create_DBLinkStr(), oc);
                //t_oc.CommandText = "";
                //t_oc.CommandType=CommandType.StoredProcedure;
                //t_oc.Parameters.Add(op);
                t_oc.ExecuteNonQuery();
                oc.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }"create database link whatup  connect to test identified by \"1234\"using '(DESCRIPTION =  (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.1)(PORT = 1521))  )(CONNECT_DATA =  (SERVICE_NAME = orcl)  )  )'"
这个拼接出来的ExecuteNonQuery()时报错无效字符
public string DBLinkString
        {
            get
            {
                String dbls = "create database link {0}  connect to {1} identified by \"{2}\"" +
                            "using '(DESCRIPTION =  (ADDRESS_LIST =  " +
                            "(ADDRESS = (PROTOCOL = TCP)(HOST = {3})(PORT = {4}))  )" +
                            "(CONNECT_DATA =  (SERVICE_NAME = {5})  )  )'";
                try
                {
                      
                }
                catch { }
                return string.Format(dbls, "whatup", this._c_username.Value, this._c_password.Value, this._c_ipaddress.Value, "1521", "orcl");
            }        } private bool create_DBLink()
        {
            try
            {
                OracleConnection oc = new OracleConnection(ConfigurationManager.ConnectionStrings["155"].ConnectionString);
                oc.Open();
                //OracleParameter op=new OracleParameter("DBLINK",OracleType.VarChar);
                //op.Value = get_Create_DBLinkStr();
                OracleCommand t_oc = new OracleCommand(DBLinkString, oc);
                //t_oc.CommandText = "";
                //t_oc.CommandType=CommandType.StoredProcedure;
                //t_oc.Parameters.Add(op);
                t_oc.ExecuteNonQuery();
                oc.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
create database link whatup  connect to test identified by "1234"using '(DESCRIPTION =  (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.85.151)(PORT = 1521))  )(CONNECT_DATA =  (SERVICE_NAME = orcl)  )  )'
这个是string拼的,ExecuteNonQuery()却不报错。。 2个字符串一样的东西到了ExecuteNonQuery()一个过,一个不过,我弄了1个小时了。无奈了发贴求助!

解决方案 »

  1.   

    String类对象是不可改变的(只读),对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果,因此,当你需要大量拼接、删除、修改字符串使用 StringBuilder 可以优化性能
    单步查询数据
      

  2.   

    楼上,并不是你说的,我的意思是DBLinkString属性字符串拼接出来的字符能通过t_oc.ExecuteNonQuery();
    而get_Create_DBLinkStr()拼接出来的却过不了,2个一模一样的,为什么出这样的事呢???
      

  3.   

    如果你发觉某个地方必须有个“;”  -->  如果你发觉某个地方不能有个“;”例如在你的create_DBLin中在ExecuteNonQuery之前加入一条断言,其条件就是判断: !DBLinkString.Trim().EndWith(";")。
      

  4.   

    如果你不是有几百个TDD测试驱动开发出来的程序,那么好的程序往往需要有几千个断言。其实实现代码并不重要,把需求描述、曾经出现的bug写成断言(或者TDD测试用例),要比实现程序功能代码重要多了。而且他们就是文档,那种迂腐的写在word里边的文档起不了控制开发的作用,这些可执行的代码才能真正的文档。
      

  5.   

    to:sp1234
    谢谢您的醒言~