Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# c填充数据表_C#_Sql_Wpf_Dataset - Fatal编程技术网

C# c填充数据表

C# c填充数据表,c#,sql,wpf,dataset,C#,Sql,Wpf,Dataset,我有一个文本框window1.xaml,可以作为搜索框使用。我在我的项目中使用一个集成的sql数据库,我有一个dataset.xsd以及tabel适配器和查询 每当我需要查询数据库时,我都会执行以下操作: BooksTableAdapter tableAdapterBooks = new BooksTableAdapter(); dataSetLibrary.BooksDataTable dataTableBooks; dataTableBooks = tableAdapterBooks.get

我有一个文本框window1.xaml,可以作为搜索框使用。我在我的项目中使用一个集成的sql数据库,我有一个dataset.xsd以及tabel适配器和查询

每当我需要查询数据库时,我都会执行以下操作:

BooksTableAdapter tableAdapterBooks = new BooksTableAdapter();
dataSetLibrary.BooksDataTable dataTableBooks;
dataTableBooks = tableAdapterBooks.getDataByTitle(searchText);
对于这个搜索框,我有以下代码

string[] allWords = txtSearch.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string sql = "SELECT Books.ISBN, Books.Title, Books.Tag, Books.Image, Books.photoType, Publishers.Name AS publisherName FROM Books INNER JOIN Publishers ON Books.codPublisher = Publishers.codPublisher WHERE ";
using (SqlCommand command = new SqlCommand())
{
    for (int i = 0; i < allWords.Length; ++i)
    {
          if (i > 0)
          sql += "OR ";

          string paramName = "@param" + i.ToString();
          sql += string.Format("(Books.Title LIKE {0}) ", paramName);
          command.Parameters.AddWithValue(paramName, allWords[i] + "%");
     }
     command.CommandText = sql;
 }

如何使用该命令查询数据库并填写dataTableBooks?

经过几个小时的讨论,我想出了这个解决方案

private SqlConnection sqlConn = new SqlConnection();
private System.Data.DataSet dataSet = new System.Data.DataSet();
private System.Data.DataTable dataTable;
private System.Data.DataRow dataRow;

private SqlCommand search(string searchParam, int searchOption)
    {
        SqlCommand command = new SqlCommand();
        string sql;
        string[] allWords = searchParam.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        if (searchOption == 1)
        {
            sql = "SELECT Livros.ISBN, Livros.Titulo, Livros.Tema, Livros.Resumo, Livros.Imagem, Livros.fotoTipo, Editoras.Nome AS nomeEditora FROM Livros INNER JOIN Editoras ON Livros.codEditora = Editoras.codEditora WHERE ";
        }
        else
        {
            sql = "SELECT Livros.ISBN, Livros.Titulo, Livros.Tema, Livros.Resumo, Livros.Imagem, Livros.fotoTipo, Editoras.Nome AS nomeEditora FROM Livros INNER JOIN livrosAutores ON Livros.ISBN = livrosAutores.ISBN INNER JOIN Autores ON livrosAutores.idAutor = Autores.idAutor INNER JOIN Editoras ON Livros.codEditora = Editoras.codEditora WHERE ";
        }
        using (command)
        {
            for (int i = 0; i < allWords.Length; ++i)
            {
                if (i > 0)
                {
                    sql += "OR ";
                }

                if (searchOption == 1)
                {
                    sql += string.Format("(Livros.Titulo LIKE '%{0}%') ", allWords[i]);
                }
                else
                {
                    sql += string.Format("(Livros.Autor LIKE '%{0}%') ", allWords[i]);
                }
            }
            command.CommandText = sql;
        }
        return command;
    }

protected void Bind()
    {
            sqlConn.ConnectionString = Properties.Settings.Default.BibliotecaConnectionString;
            string connectionString = sqlConn.ConnectionString.ToString();
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(search(searchText, searchOption).CommandText, connectionString);
            sqlDataAdapter.Fill(dataSet, "livrosTitulo");
            dataTable = dataSet.Tables["livrosTitulo"];
            dataGrid.DataContext = dataTable.DefaultView;
    }