使用mySQL和MariaDB在C#中创建表

使用mySQL和MariaDB在C#中创建表,c#,mysql,mariadb,C#,Mysql,Mariadb,一周前,我问过,如何用C#程序在MariaDB中创建一个数据库,然后它就工作了 所以,我想,创建一些其他SQL命令并不是那么困难,但它不起作用 代码:我制作了一个构造函数,它在MariaDB中创建了一个数据库,这很有效。所以我创建了一个方法,它应该使用数据库并创建一个包含语句的表。这不管用 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Thre

一周前,我问过,如何用C#程序在MariaDB中创建一个数据库,然后它就工作了

所以,我想,创建一些其他SQL命令并不是那么困难,但它不起作用

代码:我制作了一个构造函数,它在MariaDB中创建了一个数据库,这很有效。所以我创建了一个方法,它应该使用数据库并创建一个包含语句的表。这不管用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace mySqlCsPrototype3
{
    class Program
    {
        static void Main(string[] args)
        {
            route rot = new route();
            rot.useDBCreateTable();
            Console.Read();
        }


    }
    public class route
    {
        public route()
        {
            string verbindung = "server=localhost;database=example_bankdb;uid=root;password=";
            MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(verbindung);
            MySqlCommand cmd;
            string s0;

            try
            {
                dbConn.Open();
                s0 = "CREATE DATABASE IF NOT EXISTS `mydb`;";
                cmd = new MySqlCommand(s0, dbConn);
                cmd.ExecuteNonQuery();
                dbConn.Close();
                Console.WriteLine("Verbindung wird hergestellt");
            }
            catch
            {
                Console.WriteLine("Die Verbindung kann nicht hergestellt werden");
            }

        }

        public void useDBCreateTable()
        {
            string verbindung = "server=localhost;database=example_bankdb;uid=root;password=";
            MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(verbindung);
            MySqlCommand cmd;
            string s0;
            try
            {
                dbConn.Open();
                s0 = "USE 'mydb'; CREATE TABLE 'user' IF NOT EXISTS('userID' INT AUTO_INCREMENT ,'name' varchar(100) NOT NULL, PRIMARY KEY('userID'));";
                cmd = new MySqlCommand(s0, dbConn);
                cmd.ExecuteNonQuery();

                dbConn.Close();
                Console.WriteLine("Verbindung wird hergestellt");
            }
            catch
            {
                Console.WriteLine("Die Verbindung kann nicht hergestellt werden");
            }


        }
    }
}
示例代码

所以,我希望你能帮助我


你好,皮劳乔谢谢你的帮助,我发现了错误,我犯了错误。 在C#中,数据库或表的名称必须在这些砖砌中[``]

s0 = "CREATE TABLE IF NOT EXISTS `user`(`userID` INT AUTO_INCREMENT ,`name` varchar(100) NOT NULL, PRIMARY KEY(`userID`));";

感谢您的关注和紧张。

“不工作”不是错误消息或问题陈述。如果没有关于问题的任何其他信息,我们无法修复代码中的“不工作”。它怎么不起作用?当你运行代码时会发生什么?我注意到你正在抑制你的异常,所以也许可以先添加一些代码来记录实际的错误消息,而不仅仅是你发明的一个随机短语。它没有抛出错误消息,它无法执行查询,我不知道为什么。“它没有抛出错误消息”…是的,它有。根据您的屏幕截图,它在第二行输出
Die Verbindung kann nicht hergestellt werden
。这意味着它在(
useDBCreateTable
方法)中输入了第二个
catch
块。事实上,您没有得到实际的异常消息是因为,正如我上面提到的,您故意抑制了真正的异常消息!这是一种反模式,将使您永远无法调试代码。至少您应该编写(
catch(Exception ex){Console.WriteLine(“Die Verbindung kann nicht hergestellt werden”);Console.WriteLine(ex.ToString());}
以获取最少的信息。显然,对于实际使用,您应该将数据记录到事件日志或文件中,而不是在屏幕上显示。但出于此目的,它应该更好。还有一件事……您编写了
s0=“使用'mydb';创建表'user'
…但就在上面,您编写了
string verbindung=”server=localhost;database=example\u bankdb;
…如果您想使用
mydb
进行查询,那么为什么不在连接字符串中设置它??
string verbindung=“server=localhost;database=mydb;
。查询本身可以是
s0=”创建表
…等等。我怀疑您可能遇到的一个问题是,您不能通过ADO.NETTrue一次执行多个语句,但这不仅仅是在C#中。这是标准的MySQL语法。如果您也直接在MySQL中运行它,则会失败。不过,希望至少您现在已经学会了在C#中记录异常:-)注:这些括号被称为“反勾号”