【问题标题】:How to connect to db with UWP?如何使用 UWP 连接到数据库?
【发布时间】:2019-09-17 13:04:03
【问题描述】:

我正在使用 db 创建一个 UWP 应用程序。 由于某种原因,它不会连接到本地数据库

我已经安装了 MySql.data 以供参考,并且我确实测试了连接 我还检查以确保远程注册表正在运行

    {

        string connectString = "server=127.0.0.1;database=harteliefie;Uid=root@localhost;Pwd=;";
        string sql = "SELECT * FROM `user`";
        private DataTable dataTable;


        public MainPage()
        {
            this.InitializeComponent();

            CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
            var titleBar = ApplicationView.GetForCurrentView().TitleBar;
            if (titleBar != null)
            {
                titleBar.ButtonBackgroundColor = Colors.Transparent;
                titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;
                titleBar.ButtonForegroundColor = Colors.DarkSlateGray;
            }

        }

        private async void ConnectButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(connectString))
                {
                    connection.Open();
                }

                var dialog = new MessageDialog("Connected")
                {
                    Title = "OK"
                };

                await dialog.ShowAsync();
            }
            catch (Exception ex)
            {
                var dialog = new MessageDialog(ex.Message)
                {
                    Title = "Error"
                };

                await dialog.ShowAsync();
            }
        }

        private void Query1Button_Click(object sender, RoutedEventArgs e)
        {
            var query = @"
                    SELECT Replace(Lower(type_desc), '_', ' ') AS [Object Type], COUNT(*) AS [Number Of Entities]
                    FROM sys.objects
                    WHERE type_desc NOT IN ('SYSTEM_TABLE', 'INTERNAL_TABLE')
                    GROUP BY type_desc";

            ExecuteQuery(query);
        }
        private void Query2Button_Click(object sender, RoutedEventArgs e)
        {
            var query = @"
                WITH cte AS
                (
                SELECT DISTINCT fk.constraint_object_id, 0 AS ccid, CONVERT(NVARCHAR(MAX), '') AS cs
                  FROM sys.foreign_key_columns fk
                  LEFT OUTER JOIN sys.index_columns ic
                     ON ic.object_id = fk.parent_object_id  /* same table */
                        AND ic.column_id = fk.parent_column_id  /* same column */
                        AND ic.index_column_id = fk.constraint_column_id /* same column position */
                WHERE ic.object_id IS NULL

                UNION ALL

                SELECT cte.constraint_object_id, fk.constraint_column_id, cte.cs + ', ' + fc.name
                FROM cte
                  JOIN sys.foreign_key_columns fk ON cte.constraint_object_id = fk.constraint_object_id AND cte.ccid + 1 = fk.constraint_column_id
                  JOIN sys.columns fc ON fk.parent_object_id = fc.object_id AND fk.parent_column_id = fc.column_id
                )
                SELECT MAX(fks.name) AS [Schema], MAX(fkt.name) AS [Table], SUBSTRING(MAX(cs), 2, 9999999) AS [Columns], MAX(fko.name) AS [Foreign Key], MAX(fkrs.name) AS [Referenced Schema], MAX(fkr.name) AS [Referenced Table]
                  FROM cte
                  JOIN sys.foreign_key_columns fk ON cte.constraint_object_id = fk.constraint_object_id AND cte.ccid = fk.constraint_column_id
                  JOIN sys.objects fkt ON fk.parent_object_id = fkt.object_id
                  JOIN sys.schemas fks ON fks.schema_id = fkt.schema_id
                  JOIN sys.objects fko ON fk.constraint_object_id = fko.object_id
                  JOIN sys.objects fkr ON fk.referenced_object_id = fkr.object_id
                  JOIN sys.schemas fkrs ON fkr.schema_id = fkrs.schema_id
                GROUP BY cte.constraint_object_id";

            ExecuteQuery(query);
        }

        private void Query3Button_Click(object sender, RoutedEventArgs e)
        {
            var query = @"
                SELECT TOP 15
                    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS 'Avg CPU Time',
                    MIN(query_stats.statement_text) AS 'SQL Statement',
                    MIN(query_stats.statement_text) AS 'Full SQL Statement'
                FROM
                    (SELECT QS.*,
                    SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1,
                    ((CASE statement_end_offset
                        WHEN - 1 THEN DATALENGTH(ST.text)
                        ELSE QS.statement_end_offset END
                            - QS.statement_start_offset) / 2) + 1) AS statement_text
                     FROM sys.dm_exec_query_stats AS QS
                     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
                GROUP BY query_stats.query_hash
                ORDER BY 1 DESC;";

            ExecuteQuery(query);
        }

        private async void ExecuteQuery(string query)
        {
            using (var connection = new SqlConnection(connectString))
            {
                await connection.OpenAsync();
                var command = connection.CreateCommand();
                command.CommandText = query;
                dataTable = new DataTable();

                using (var dataAdapter = new SqlDataAdapter(command))
                {
                    dataAdapter.Fill(dataTable);
                }
            }

            BindTable(dataTable, ResultsGrid);

            if (dataTable.Rows.Count == 0)
            {
                ResultsGrid.Visibility = Visibility.Collapsed;
            }
            else
            {
                ResultsGrid.Visibility = Visibility.Visible;
            }
        }

        private void BindTable(DataTable table, DataGrid grid)
        {
            // Generate columns with index binding

            grid.Columns.Clear();
            grid.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed;

            for (int i = 0; i < table.Columns.Count; i++)
            {
                if (table.Columns[i].ColumnName == "Full SQL Statement")
                {
                    // Treat 'Full SQL Statement' column differently.
                    grid.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
                }
                else
                {
                    grid.Columns.Add(new DataGridTextColumn()
                    {
                        Header = table.Columns[i].ColumnName,
                        Binding = new Binding { Path = new PropertyPath("[" + i.ToString() + "]") }
                    });
                }
            }

            // Post-process 'SQL Statement' column.
            if (table.Columns.Contains("SQL Statement"))
            {
                var column = table.Columns["SQL Statement"];

                foreach (DataRow row in table.Rows)
                {
                    string sqlStatement = ((row[column] as string) ?? string.Empty).Trim();
                    row[column] = string.Join(' ', sqlStatement.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries)).Substring(0, 80) + "...";
                }

                table.AcceptChanges();
            }

            RefreshContents(table, grid);
        }

        private void RefreshContents(DataTable table, DataGrid grid)
        {
            // Create collection
            var collection = new ObservableCollection<object>();
            foreach (DataRow row in table.Rows)
            {
                collection.Add(row.ItemArray);
            }

            grid.ItemsSource = collection;
        }

        private void ResultsGrid_Sorting(object sender, DataGridColumnEventArgs e)
        {
            var currentSortDirection = e.Column.SortDirection;

            foreach (var column in ResultsGrid.Columns)
            {
                column.SortDirection = null;
            }

            var sortOrder = "ASC";

            if ((currentSortDirection == null || currentSortDirection == DataGridSortDirection.Descending))
            {
                e.Column.SortDirection = DataGridSortDirection.Ascending;
            }
            else
            {
                sortOrder = "DESC";
                e.Column.SortDirection = DataGridSortDirection.Descending;
            }

            var dataView = dataTable.DefaultView;
            dataView.Sort = e.Column.Header + " " + sortOrder;
            dataTable = dataView.ToTable();

            RefreshContents(dataTable, ResultsGrid);
        }}}

错误是:

ExtendedSocketException:无法建立连接,因为 目标机器主动拒绝 127.0.0.1:1433

System.Data.SqlClient.SqlException: '网络相关或 建立连接时发生特定于实例的错误 SQL 服务器。服务器未找到或无法访问。核实 实例名称正确且 SQL Server 配置为 允许远程连接。 (提供者:TCP 提供者,错误:35 - An 内部异常被捕获)'

我只需要成功连接

【问题讨论】:

  • 您使用的是哪个 dbms? (MySQL 或 MS SQL Server 或...?)
  • @jarlh Xampp phpMyadmin db 我认为是 MySql
  • 但错误信息表明 MS SQL Server 以某种方式参与。
  • @jarih 这可能是 MySql 用来建立数据库连接的数据连接器的原因吗?
  • 您好,如果您使用的是MySql,请使用MySqlConnection,具体连接可以参考这个document

标签: sql uwp


【解决方案1】:

如果你使用的是MySql,使用MySqlConnection()来初始化数据库,比如:

using(MySqlConnection connection = new MySqlConnection(connectString))
{
    // other code
}

最好的问候。

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 2017-11-02
    • 2019-08-22
    • 1970-01-01
    • 2015-12-29
    • 2021-03-10
    • 2017-05-16
    • 2020-02-22
    • 2011-06-29
    相关资源
    最近更新 更多