我知道这种问题会不时被问到,但我找不到任何令人满意的解决方案.
如何使用MS ACE OLEDB 12打开CSV文件?我尝试使用以下代码.
DbConnection connection = new OleDbConnection();
connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Documents;Extended Properties=\"Text;HDR=Yes\"";
connection.Open();
DbCommand cmd;
cmd = connection.CreateCommand();
cmd.CommandText = "SELECT * FROM [Mappe1#csv]";
DbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
Console.Write("(" + reader.GetValue(i).ToString() + ")");
Console.WriteLine();
}
cmd.Dispose();
connection.Dispose();
Console.WriteLine("Done");
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)
问题是只找到一列.文本由';'分隔.即使我用"Delimited(|)"指定分隔符,它也行不通.
我找不到这个提供商的任何文档......
作为分析工具的一部分,我有一个自定义ADO.NET堆栈,它充当标准ADO.NET的"装饰器",因此它实际上不做任何工作 - 它只是传递调用(但是使用日志记录等) ).除此之外,我提供了一个DbProviderFactory来自我的自定义连接,它实现IServiceProvider并提供自定义DbProviderServices.
这适用于大多数工具,包括LINQ-to-SQL - 然而,Entity Framework并不满意.
例如 - 说我有:
MetadataWorkspace workspace = new MetadataWorkspace(
new string[] { "res://*/" },
new Assembly[] { Assembly.GetExecutingAssembly() });
using(var conn = /* my custom wrapped DbConnection */)
{
var provider = DbProviderServices
.GetProviderServices(conn); // returns my custom DbProviderServices
var factory = DbProviderServices
.GetProviderFactory(conn); // returns my custom DbProviderFactory
...
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好 - 以上两条线都有效; 返回正确的(自定义)提供程序信息.
现在我们可以添加一个EF模型:
using (var ec = new EntityConnection(workspace,conn))
using (var model = new …Run Code Online (Sandbox Code Playgroud) 我知道这不是代码问题.但是,我尝试处理存储在目录中的一些数据库/data/data/com.sec.android.provider.*.
提供者签名中的"sec"是什么意思?它取决于制造商吗?
一个例子:内容提供商call_logs在/data/data/com.sec.android.provider.logsprovider三星上读取数据库.什么读取HTC上相同的内容提供商?
我有点困惑......
我有实现 ChangeNotifier 的模型
class DataModel with ChangeNotifier{
List<Data> data = List<Data>();
void addData(Data data){
data.add(data);
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
以及一个监听这些变化的 ListView:
class DataListView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<DataModel>(
builder: (context, model, child) {
return ListView.builder(
itemCount: model.data.length,
itemBuilder: (context, index) {
return Text(model.data[index].value);
},
);
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,当一个项目添加到模型中的列表时,更改通知会触发 Listview 的重建,我会看到新数据。但是我无法将它与 AnimatedList 而不是 ListView 一起使用。最好我喜欢保持我的模型原样,因为动画是 ui 的问题,而不是我的逻辑。
changenotifier 总是为我提供最新版本的数据,但我真正需要的是“添加项目”或“删除项目”通知。
有没有这样做的最佳实践方法?
我正在使用 BLOC 架构编写一个应用程序,并在 main.dart 中注册像这样的块提供程序:
runApp(MultiBlocProvider(providers: [
BlocProvider<OrderBloc>(
create: (context) {
return OrderBloc()..add(OrderInitialEvent());
},
),
BlocProvider<AuthenticationBloc>(
create: (context) {
return AuthenticationBloc(userService: userService)..add(AppStarted());
},
),
...
], child: MyApp()));
Run Code Online (Sandbox Code Playgroud)
现在我需要将 Provider 方法与 BLOC 一起使用,但不知道如何注册它?是否可以?谢谢
有许多类具有此provider后缀.(数据,会员,modelmetadata,...).
什么时候应该是一个被称为提供者类的类?
我正在使用2003年的一些代码.有一个对以下类的引用:
new com.sun.net.ssl.internal.ssl.Provider()
Run Code Online (Sandbox Code Playgroud)
它导致错误:
Access restriction: The type Provider is not accessible due to restriction on required library /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jsse.jar
有没有人对使用这个类的合适替代方案有任何建议?
点击按钮后,我从提供商处获取内容
Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(i, REQUESTCODE);
Run Code Online (Sandbox Code Playgroud)
现在我想让用户进行多项选择是否有可能.
我正在尝试从数据库中删除我的数据,如果成功的话,请继续导航到我的主页。
下面是我的代码:
StatelessWidget 由 deleteFromDatabase 方法组成,该方法传递了一个Id(String) 和一个 a context:
Consumer<SettingsProvider>(
builder: (context, settingsProvider, child) {
final exerciseSettings = settingsProvider.findById(id);
if (exerciseSettings == null) {
return Center(
child: CircularProgressIndicator(),
);
}
return PreviewExerciseItem(
exerciseSettings: exerciseSettings,
id: id,
navigateToEdit: () =>
_navigateToEditPage(exerciseSettings, context),
deleteFromDatabase: () => _deleteFromDatabase(id, context),
navigateToCountDown: () =>
navigateToCountDownPage(exerciseSettings, context),
);
},
),
Run Code Online (Sandbox Code Playgroud)
从 StatelessWidget 调用 _deleteFromDatabase 方法并显示一个 AlertDialog 以确认删除:
void _deleteFromDatabase(String id, context) async {
await showDialog(
context: context,
builder: (context) => new AlertDialog(
title: …Run Code Online (Sandbox Code Playgroud) 假设我有一个用于检查用户是否登录的基本设置:
import { createContext } from "react";
const UserContext = createContext<string | null>(null)
export default UserContext
Run Code Online (Sandbox Code Playgroud)
在我的 App.tsx 中,我想创建一个 useState 挂钩,以便我可以管理整个应用程序中的上下文状态:
//Context
const [context, setContext] = useState<string | null>(null)
<UserContext.Provider value={{context, setContext}}>
<Routes>
<Route path="/" element={<Home/>}/>
<Route path="/login" element={<Login/>}/>
<Route path="/register" element={<Register/>}/>
<Route path="/admin" element={<Admin/>}></Route>
</Routes>
</UserContext.Provider>
Run Code Online (Sandbox Code Playgroud)
因此,据我所知,我只需要登录用户的名称,或者如果我想拒绝访问某些页面,则将上下文的状态设置为空。现在的问题是打字稿在这里对我大喊大叫,特别是在 Provider 的值中:
Type '{ context: string | null; setContext:
React.Dispatch<React.SetStateAction<string | null>>; }' is not assignable to type 'string'.ts(2322)
Run Code Online (Sandbox Code Playgroud)
我可以强制转换该值,如下所示:
value={{context, setContext} as any}
Run Code Online (Sandbox Code Playgroud)
但这似乎并不是一个特别优雅的“打字”解决方案。
任何帮助表示赞赏!