1

我对 C# 非常陌生,并试图开发一种工具来重新索引 sql server 数据库的选定表,这样用户就不必进入数据库并运行任何命令。

namespace DBTool
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        public DataSet GetTableNames()
        {
            try
            {

                //Local variables
                DataSet resultSet = new DataSet();

                //Get the connection string from the config file
                string connectionString = ConfigurationManager.ConnectionStrings["DBTool.Properties.Settings.ConStr"].ConnectionString;

                //Create a new database connection
                SqlConnection connection = new SqlConnection(connectionString);

                //Set the stored procedure 'sproc_Get_Tables_Names' as the command to be executed
                using (SqlCommand cmd = new SqlCommand("sproc_Get_Tables_Names", connection))
                {

                    //Setup the command object
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandTimeout = 0;

                    //Open the connection
                    if (connection.State != ConnectionState.Open)
                    {
                        connection.Open();
                    }

                    //Execute the query and fill out the dataset
                    adapter.Fill(resultSet);

                    //Close the connection
                    connection.Close();

                    //Return the result of the stored procedure
                    return resultSet;
                }
            }

            catch (Exception ex)
            {

               MessageBox.Show("An error occurred due to the following exception: " + ex.ToString() + ".","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
               return null;

            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataSet set = GetTableNames();

            dataGridView1.DataSource = set.Tables[0];
        }

        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
        }
    }
}
4

1 回答 1

1

我针对我的一个数据库(使用不同的存储过程)运行了您的代码,并且它可以工作。你有什么例外吗?尝试将连接字符串上的超时设置为较低的值并再次运行。

代码有效的事实意味着 SQL Server/网络连接/权限是一个问题,并且超时时间太长以至于您永远不会收到异常。

一些事情要尝试:

  • 存储过程是否在服务器上执行正常?

  • 如果是这样,它返回了多少数据?您是否返回了大量荒谬的数据并且需要很长时间?

  • 连接字符串提供的用户是否有权执行存储的过程?

  • 您可以使用相同的凭据使用 SQL Management Studio 连接到 SQL Server 吗?

于 2013-08-20T10:08:25.077 回答