首页 >> 编程知识

错误602:未能在sysindexes中找到数据库ID7中对象ID1的索引ID1对应的行、ADO.NET 中 DataReader 各种读取方式性能差别

错误602:未能在sysindexes中找到数据库ID7中对象ID1的索引ID1对应的行



错误602;未能在sysindexes 
 
a  DBCC CHECKTABLE
修复一下


b  问题解决了,把 sql server 2000 删除,重装sql server 2005 顺利附加。


错误602;未能在sysindexes中找到数据库ID7中对象ID1的索引ID1对应的行

我的数据库是从别的机子上拷过来的哦~~~"错误602;未能在sysindexes中找到数据库ID7中对象ID1的索引ID1对应的行。 请对sysindexes运行DBCC CHECKTSBL "这种提示是不是表示我的数据库有所损坏啊

这种情况首先核对一下51aspx上源码所表明的开发环境(如 VS2005+Sql2005),如果是采用sqlServer2005的话你用Sql2000附加Sql2005的数据库就会出现这种错误(解决方法:改用SqlServer2005附加一下,如果还想用Sql2000格式那就用导出sql语句等方式进行转换)

 

 

问题 1.本人有一动网论坛数据库.21kor_data.mdf和21kor_log.ldf.以前运行在sql2000下面.后来因为数据库升级.附加到sql2005上面.均正常运行
2.因为sql2005在从access导入数据时不能正常导入.先打算从2005在回到2000.方法是附加数据库.不能正常附加
3.错误提示:错误602,未能在sysindexes中找到数据库id9中对象id1的索引id1对应行.请对sysindexes运行dbcc checktable! 1.本人有一动网论坛数据库.21kor_data.mdf和21kor_log.ldf.以前运行在sql2000下面.后来因为数据库升级.附加到sql2005上面.均正常运行
2.因为sql2005在从access导入数据时不能正常导入.先打算从2005在回到2000.方法是附加数据库.不能正常附加
3.错误提示:错误602,未能在sysindexes中找到数据库id9中对象id1的索引id1对应行.请对sysindexes运行dbcc checktable! 响应者 1:晕

人可以往高处走不能往低处走

都说向后兼容

响应者 2:用sql2005附加升级过的数据库是不能再附加到sql2000上的。你只能够从sql2005中导出sql教本后再2000里面建立一个新的数据库,然后吧excel 文件导入导2000里面。再用dps导入到2005里面(最后一步没测试过。应该可以) 响应者 3:sql server 2000的数据库可以附加到2005上,反之则不行。

sql server 2005从access导入数据也不应该有什么问题。 响应者 4:反对用附加的方法,不安全(虽然大部分情况用分离--〉附加是没有问题的)
响应者 5:提示:错误602,未能在sysindexes中找到数据库id9中对象id1的索引id1对应行.请对sysindexes运行dbcc checktable!
上面的提示什么作用呢?特别是dbcc checktable!这个我试图执行下.但是不成功.修改了数据库对应的id9也? 
 



ADO.NET 中 DataReader 各种读取方式性能差别



很早就做了DataReader 一个测试

~~【拍砖有分】允许,偶也拉风一次哈~~

A.
非官方(^_^)测试结论(以下序号越大,性能越低)

1. DataReader.GetXXX(<<ColumnIndex>>)

2. DataReader.GetXXX(Dictionary<string, int>[<<ColumnName>>])
[Dictionary<string, int>.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))] 

3. DataReader.GetXXX((Int32)Hashtable[<<ColumnName>>])
[Hashtable.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))]

4. (<<Type>>)DataReader[<<ColumnIndex>>]

5. DataReader.GetXXX(DataReader.GetOrdinal(<<ColumnName>>))

6. Convert.ToXXX(DataReader[<<ColumnIndex>>])

7. (<<Type>>)DataReader[<<ColumnName>>]

8. Convert.ToXXX(DataReader[<<ColumnName>>]

B.
测试实例
说明
1. 此测试,直接使用 ASP.NET(似乎不影响对比性),抱歉了,偶就会 WebForm,比较理想的当然整个 Console Applilcation 让她跑

2. 懒于准备样表数据,直接使用 SQL Server 2k. Northwind.Products 表,且只读取 ProductID 字段(INT 型),并由应用程序多次重复读取同一数据,模拟大数据量的效果

测试代码

protected void Button1_Click(object sender, EventArgs e)
    {
        int i = 5;
        while (i-- > 0) {
            ExecuteTest();
            System.Threading.Thread.Sleep(1000 * 10);
        }
    }

    private void ExecuteTest()
    {
        const int COLUMN_INDEX_PRODUCT_ID = 0;
        const string COLUMN_NAME_PRODUCT_ID = "ProductID";

        StringBuilder sb = new StringBuilder();
        int loops = 100;
        for (int k = 0; k < 5; k++, loops *= 10) {
            sb.AppendFormat("{0, 10:N0}\t", loops * 50);

            // 1. DataReader.GetXXX(<<ColumnIndex>>)
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = dr.GetInt32(COLUMN_INDEX_PRODUCT_ID);
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 2. (<<Type>>)DataReader[<<ColumnIndex>>]
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = (int)dr[COLUMN_INDEX_PRODUCT_ID];
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 3. Convert.ToXXX(DataReader[<<ColumnIndex>>])
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = Convert.ToInt32(dr[0]);
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 4. (<<Type>>)DataReader[<<ColumnName>>]
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = (int)dr[COLUMN_NAME_PRODUCT_ID];
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 5. Convert.ToXXX(DataReader[<<ColumnName>>]
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = Convert.ToInt32(dr[COLUMN_NAME_PRODUCT_ID]);
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 6. DataReader.GetXXX(DataReader.GetOrdinal(<<ColumnName>>))
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        productId = dr.GetInt32(dr.GetOrdinal(COLUMN_NAME_PRODUCT_ID));
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 7. DataReader.GetXXX((Int32)Hashtable[<<ColumnName>>])
            //    Hashtable.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                Hashtable columns = new Hashtable();

                int j = 0;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        if (j++ == 0) columns.Add(COLUMN_NAME_PRODUCT_ID, dr.GetOrdinal("ProductID"));
                        productId = dr.GetInt32((int)columns[COLUMN_NAME_PRODUCT_ID]);
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            // 8. DataReader.GetXXX(Dictionary<string, int>[<<ColumnName>>])
            //    Dictionary<string, int>.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))
            using (SqlDataReader dr = GetDataReader()) {
                int productId, i;
                DateTime start = DateTime.Now;
                Dictionary<string, int> columns = new Dictionary<string, int>();
                int j = 0;
                while (dr.Read()) {
                    i = loops;
                    while (i-- > 0) {
                        if (j++ == 0) columns.Add(COLUMN_NAME_PRODUCT_ID, dr.GetOrdinal("ProductID"));
                        productId = dr.GetInt32(columns[COLUMN_NAME_PRODUCT_ID]);
                    }
                }
                DateTime end = DateTime.Now;
                TimeSpan span = end - start;
                sb.Append(span.TotalSeconds.ToString("f7")).Append("\t");
            }

            sb.AppendLine();
        }
        sb.AppendLine();

        string path = Server.MapPath("result.txt");
        File.AppendAllText(path, sb.ToString());
    }
    
    private SqlDataReader GetDataReader()
    {
        string connStr = "server=.;database=Northwind;uid=sa;";
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT TOP 50 ProductID FROM Products";
        conn.Open();
        return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }


错误602:未能在sysindexes中找到数据库ID7中对象ID1的索引ID1对应的行、ADO.NET 中 DataReader 各种读取方式性能差别(本文完毕)
下一篇:RegisterStartupScript 方法实例
上一篇:ASP.NET性能调优总结