Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SELECT-C获取所有行和列数据_C#_Sql_Return_Selectall - Fatal编程技术网

C# 使用SELECT-C获取所有行和列数据

C# 使用SELECT-C获取所有行和列数据,c#,sql,return,selectall,C#,Sql,Return,Selectall,我试图从SQL表中获取所有数据,并使用C编程语言将其存储在列表中 Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +""; conn = new SqlConnection(Connstr); try

我试图从SQL表中获取所有数据,并使用C编程语言将其存储在列表中

        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}
我使用的SQL语句是:

private string cmdShowEmployees = "SELECT * FROM Employees;";
        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}
这在同一类中用作函数

public List<string> showAllIdData()
{
  List<string> id = new List<string>();
  using (sqlConnection = getSqlConnection())
  {
    sqlCommand.Connection = sqlConnection;
    sqlCommand.CommandText = cmdShowEmployees;
    SqlDataReader reader = sqlCommand.ExecuteReader();
    while (reader.Read()) {
      id.Add(reader[0].ToString());
    }
    return id;
  }
}
        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}

有什么想法吗?

如果必须以这种方式使用读卡器,为什么不创建一个保存表行数据的对象呢

public class SomeComplexItem
{
    public string SomeColumnValue { get; set;}
    public string SomeColumnValue2 { get; set;}
    public string SomeColumnValue3 { get; set;}
    public string SomeColumnValue4 { get; set;}
}
        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}
通过这种方式,您可以按如下方式与读者进行循环:

public List<SomeComplexItem> showAllActiveData()
{
    List<SomeComplexItem> active = new List<SomeComplexItem>();
    using (sqlConnection = getSqlConnection())
    {
        sqlCommand.Connection = sqlConnection;
        sqlCommand.CommandText = cmdShowEmployees;
        SqlDataReader reader = sqlCommand.ExecuteReader();
        while (reader.Read())
        {
            var someComplexItem = new SomeComplexItem();
            someComplexItem.SomeColumnValue = reader[1].ToString();
            someComplexItem.SomeColumnValue2 = reader[2].ToString();
            someComplexItem.SomeColumnValue3 = reader[3].ToString();

            active.Add(someComplexItem);
        }
        return active;

    }
        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}

您可以使用两个select语句填充两个列表,如下例所示,其中读取之间的键为reader.NextResult

        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}
使用的数据库是标准的Microsoft NorthWind数据库

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

namespace SQL_Server_TwoList
{
    public class DataOperations
    {
        public List<string> Titles { get; set; }
        public List<string> Names { get; set; }

        /// <summary>
        /// Trigger code to load two list above
        /// </summary>
        public DataOperations()
        {
            Titles = new List<string>();
            Names = new List<string>();
        }
        public bool LoadData()
        {
            try
            {
                using (SqlConnection cn = new SqlConnection(Properties.Settings.Default.ConnectionString))
                {
                    string commandText = @"
                    SELECT [TitleOfCourtesy] + ' ' + [LastName] + ' ' + [FirstName] As FullName FROM [NORTHWND.MDF].[dbo].[Employees]; 
                    SELECT DISTINCT [Title] FROM [NORTHWND.MDF].[dbo].[Employees];";

                    using (SqlCommand cmd = new SqlCommand(commandText, cn))
                    {

                        cn.Open();

                        SqlDataReader reader = cmd.ExecuteReader();

                        // get results into first list from first select
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Names.Add(reader.GetString(0));
                            }

                            // move on to second select
                            reader.NextResult();

                            // get results into first list from first select
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    Titles.Add(reader.GetString(0));
                                }
                            }
                        }
                    }
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}
        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}

您可以始终将其全部添加到dataset或datatable中,而不是使用datareader循环添加到数组中,dataset允许您以与数组类似的方式访问数据

        Connstr = "Data Source = " + SelectedIP + "; Initial Catalog = " + dbName + "; User ID = " + txtUsername.Text +"; Password = "+ txtPassword.Text +"";
        conn = new SqlConnection(Connstr);
        try
        {
            string contents = "SELECT * FROM ..."
            conn.Open();
            SqlDataAdapter da_1 = new SqlDataAdapter(contents, conn);   //create command using contents of sql file
            da_1.SelectCommand.CommandTimeout = 120; //set timeout in seconds

            DataSet ds_1 = new DataSet(); //create dataset to hold any errors that are rturned from the database

            try
            {
                //manipulate database
                da_1.Fill(ds_1);

                if (ds_1.Tables[0].Rows.Count > 0) //loop through all rows of dataset
                {
                   for (int i = 0; i < ds_1.Tables[0].Rows.Count; i++)
                    {
                                            //rows[rownumber][column number/ "columnName"]
                        Console.Write(ds_1.Tables[0].Rows[i][0].ToString() + " ");
                    }
                }
             }
             catch(Exception err)
             {}
         conn.Close();
      }
      catch(Exception ex)
      {}

是否有特定的原因需要为每一列创建一个单独的列表?只需填写一个DataTable并将其用作BindingSource的数据源,BindingSource是DataGridView的数据源。如果我可以使用1个列表并以有组织的方式获取所有列和行,那就太好了!我为每列分隔列表的原因是因为reader[x]只拉入一列。我曾考虑过做列表,但我不确定在返回数据后该如何工作。@TimSchmelter这是一个好主意,但我以一种没有意义的方式分隔了我的类。此类特定于发送sqldata和检索sqldata。如果我开始使用Datasource/BindingSource作为解决方案,那么我的类对我来说就没有意义了。这会有用的!:当你说如果你必须以这种方式使用阅读器时,你是在暗示这种方式有缺陷吗?如果是这样的话,在你看来,什么是一种无瑕疵的方式?不,没有瑕疵。有很多方法可以做到这一点。数据表、对象关系映射器,如实体框架等。。你的这个解决方案是完全可以接受的。只有当你需要做很多事情的时候,我才会考虑用不同的方式来对待。不,只是一张桌子。但是,我将多次执行该命令。我不认为这会是一个问题,但该表最多将包括1000名员工。再次感谢你的帮助。你最好: