Плагин Shade намного проще в использовании:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>main.Main</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Это известная ошибка, и Microsoft не собирается ее исправлять ...
Чтобы решить эту проблему, выполните следующие действия:
Второй вариант - не очень хорошая идея, поскольку он открывает возможности для атак SQL-инъекций, но это быстрый взлом.
пробовали ли вы присвоить значение тем, которые имеют значение NULL? Значение (псевдо):
Если адрес равен нулю, то address = "" или Если age <0, тогда age = 0
, затем добавьте его в myList
или вы всегда можете использовать тернарный оператор:
name = name.Length < 1 ? "" : name;
age = age < 1 ? Int32.MinValue : age;
, а затем добавить его в myList
В .NET строка с нулевым значением или пустым значением не оценивается как пустая строка, то есть "". Если вы хотите "", тогда это должно быть значение строки, или если вы хотите представить null / ничего в SQL, вам нужно вручную выписать "NULL", если ваша .NET-строка на самом деле пустая / пустая.
Все, что делает команда execute, это выполнение предоставленного вами запроса SQL в виде строки. он не делает ничего особенного в отношении этой строки SQL.
Итак,
почему бы не использовать значения, допускающие значение NULL?
public void InsertCostumer(string? name, int? age, string? address)
{
List<object> myList = new List<object>();
myList.Add(name.GetValueOrDefault());
myList.Add(age.GetValueOrDefault());
myList.Add(address.GetValueOrDefault());
StringBuilder queryInsert = new StringBuilder();
queryInsert.Append("insert into Customers(name, address) values ({0}, {1}, {2})");
this.myDataContext.ExecuteCommand(queryInsert.ToString(), myList.ToArray());
}